使用uWSGI与nginx是很常见的生产配置,今天在部署的时候一直没有想通其中的关系,反复琢磨之后才搞懂,发现自己是对一开始请求的对象产生了混淆。
1.uWSGI配置如下所示
[uwsgi]
socket=外网ip:端口(使用nginx连接时,使用socket)
http=外网ip:端口(直接做web服务器,使用http)
chdir=项目根目录
wsgi-file=项目中wsgi.py文件的目录,相对于项目根目录
processes=4
threads=2
master=True
pidfile=uwsgi.pid
daemonize=uswgi.log
2.nginx配置如下
使用apt安装的nginx的配置文件处于/etc/nginx/中 (/sites-enabled/default
)
server {
#listen 80 default_server;
listen 127.0.0.1:80 default_server;
# ......
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
}
location /static {
alias /var/www/test8/static/;
}
# ......
}
listen绑定localhost的80端口,location+地址可以指定去哪里访问资源,/static访问静态文件,/访问不是静态的所有资源,配置之后,就可以通过127.0.0.1:80访问资源,普通请求通过location / 再通过uwsgi_pass转发到127.0.0.1:8000,之后通过uWSGI的socket与项目连接
与直接做web服务器不同,使用nginx之后相当于在原先的基础上又加了一层门户,通过这个门户,来判断接下来该向哪里访问,既能访问到uWSGI,也能访问静态文件,完美的解决问题