Linux+Nginx+uWSGI配置
Nginx是Python在Linux环境下的首选Web服务器之一,所以以Ubuntu Linux为例演示Nginx的安装及配置方法。
1. 安装Nginx
在Ubuntu Linux中可以通过如下命令安装Nginx:
#sudo apt-get install nginx
安装程序把Nginx以服务的形式安装在系统中,相关的程序及文件路径如下:
•程序文件:放在/usr/sbin/nginx目录中。 •全局配置文件:/etc/nginx/nginx.conf。 •访问日志文件:/var/log/nginx/access.log。 •错误日志文件:/var/log/nginx/error.log。 •站点配置文件:/etc/nginx/sites-enabled/default。
安装好后,可以通过如下命令启动Nginx服务器:
.#sudo service nginx start
停止Nginx服务器:
#sudo service nginx stop
查看Nginx服务的状态:
#sudo service nginx status
重启Nginx服务器:
#sudo service nginx restart
-----------------------------------------------------------------------------------------------------------------------------------------------!
2. Nginx配置文件
Nginx安装后以默认方式启动,在开发调试的过程中可能需要调整Nginx的运行参数,这些运行参数通过全局配置文件(nginx.conf)和站点配置文件(sites-enabled/*)进行设置。
对全局配置文件(/etc/nginx/nginx.conf)中的关键可设置参数解析如下:
user www-data; ##定义运行Nginx的用户
worker_processes 4; ##Nginx进程数,应设置与系统CPU数量相等的数值 worker_rlimit_nofile 65535; ##每个Nginx进程可以打开的最大文件数 events {
worker_connections 768; ##每个Nginx进程允许的最大客户端连接数
#在Nginx接到一个新连接通知后调用accept()来接受尽量多的连接 multi_accept off; }
http {
##
# Basic Settings
##
sendfile on; ##是否允许文件上传
client_header_buffer_size 32k; ##上传文件大小限制
tcp_nopush on; ##防止网络阻塞
tcp_nodelay on; ##防止网络阻塞
keepalive_timeout 65; ##允许的客户端长连接最大秒数
##Nginx散列表大小。本值越大,占用的内存空间越大,但路由速度越快
types_hash_max_size 2048;
access_log /var/log/nginx/access.log; ##访问日志文件路径名
error_log /var/log/nginx/error.log; ##错误日志文件路径名
## 如下两条用include命令加载站点配置文件
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
在每个Nginx服务器中可以运行多个Web站点,每个站点的配置通过站点配置文件设置。
每个站点应该以一个单独的配置文件存放在/etc/nginx/sites-enabled目录中,默认站点的配置文件名为/etc/nginx/sites-enabled/default,对其中关键内容的解析如下:
server { ##配置站点监听的端口
listen 80;
root /usr/share/nginx/html; ##配置HTTP根页面目录
index index.html index.htm; ##配置HTTP根目录中的默认页面
#站点监听的IP地址,默认的localhost只可用于本机访问,一般需要将其更改为真实IP
server_name localhost;
##location用于配置URL的转发接口
location /user/ {
##此处配置http://server_name/user/的转发地址
proxy_pass http://127.0.0.1:8080; }
##错误页面配置,如下配置定义HTTP 404错误的显示页面为/404.html
error_page 404 /404.html;
}
--------------------------------------------------------------------------------------
3. 安装uWSGI及配置
uWSGI是WSGI在Linux中的一种实现,这样开发者就无须自己编写WSGI Server了。
使用pip命令可以直接安装uWSGI:
#pip install uwsgi
安装完成后即可运行uwsgi命令启动WSGI服务器,uwsgi命令通过启动参数的方式配置可选的运行方式。
比如,如下命令可以运行uWSGI,用于加载之前编写的服务器端程序webapp.py:
#uwsgi --http :9090 --wsgi-file webapp.py
启动时用--http参数指定了监听端口,用--wsgi-file指定了服务器端的程序名。
如上所示,uWSGI在启动的过程中会输出系统的一些环境信息:服务器名、进程数限制、服务器硬件配置、最大文件句柄数等。
除了在uWSGI启动命令行中提供配置参数,uWSGI还允许通过一个配置文件设置这些配置参数,比如可以编写如下配置文件,保存在文件名uwsgi.ini中:
[uwsgi] http=:9090 wsgi-file=webapp.py
启动uWSGI时直接指定配置文件即可:
#uwsgi uwsgi.ini
此时用浏览器访问服务器的9090端口:
127.0.0.1:9090

除了http和wsgi-file参数,uWSGI还有很多其他参数,常用的如下。
•socket:以WSGI的Socket方式运行,并指定连接地址和端口。该Socket接口是uWSGI与其他Web服务器(Ng-inx/Apache)等进行对接的方式。
•chdir:指定uWSGI启动后的当前目录。
•processes:指定启动服务器端程序的进程数。
•threads:指定每个服务器端程序的线程数。即服务器端的总线程数为precesses×threads。
•uid:指定运行uWSGI的Linux用户id。
比如,如下配置文件用于用Socket方式启动一个uWSGI服务器,并配置了进程和线程数:
[uwsgi] socket=127.0.0.1:3011 wsgi-file=webapp.py processes=4 threads=3
--------------------------------------------------------------------------------------------------------------------------------------------!
4. 集成Nginx与uWSGI
直接通过在站点配置文件中为location配置uwsgi_pass,即可将Nginx与uWSGI集成,建立一个基于Nginx+Python的正式站点。
针对如下uWSGI接口有:
[uwsgi] socket=127.0.0.1:3011 wsgi-file=webapp.py
Nginx的站点配置文件为:
server {
listen 80;##此处改为服务器的真实IP
server_name 121.12.134.11;
location /{
##此处IP与Port配置必须与uwsgi接口中参数相同
uwsgi_pass http://127.0.0.1:3011;
}
}
技巧:可以为一个uWSGI配置多个Nginx Server和location,这样就轻松实现了以多域名访问同一个Python程序。
注意:
访问目标站点时,一定要向启动uwsgi

浙公网安备 33010602011771号