uWSGI
uwsgi是协议,uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范。
django默认是支持uwsgi协议的,在我们的项目配置目录里面,默认就有一个wsgi.py配置文件。
nginx + uWSGI
nginx是一个强大的代理服务器,我们可以将我们的python请求交给uWSGI服务器去处理,而静态文件它自己就能处理。
所以我们在配置uWSGI的时候,主要是通过反向代理来实现的,nginx配置文件如下:
server
{
listen 80;
listen 443 ssl http2;
server_name www.wrlod.com;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/www.wrlod.com/web/blog/;
#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
#error_page 404/404.html;
#HTTP_TO_HTTPS_START
if ($server_port !~ 443){
rewrite ^(/.*)$ https://$host$1 permanent;
}
#HTTP_TO_HTTPS_END
ssl_certificate /www/server/panel/vhost/cert/www.wrlod.com/fullchain.pem;
ssl_certificate_key /www/server/panel/vhost/cert/www.wrlod.com/privkey.pem;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
error_page 497 https://$host$request_uri;
#SSL-END
#ERROR-PAGE-START 错误页配置,可以注释、删除或修改
#error_page 404 /404.html;
#error_page 502 /502.html;
#ERROR-PAGE-END
#PHP-INFO-START PHP引用配置,可以注释或修改
#清理缓存规则
location ~ /purge(/.*) {
proxy_cache_purge cache_one $host$1$is_args$args;
#access_log /www/wwwlogs/www.wrlod.com_purge_cache.log;
}
#PROXY-START/
location /
{
proxy_pass http://127.0.0.1:8888;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
add_header X-Cache $upstream_cache_status;
#Set Nginx Cache
add_header Cache-Control no-cache;
expires 12h;
}
location ~ ^/(static)/ {
root /www/wwwroot/www.wrlod.com/web/blog;
}
#REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
include /www/server/panel/vhost/rewrite/www.wrlod.com.conf;
#REWRITE-END
#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
return 404;
}
#一键申请SSL证书验证目录相关设置
location ~ \.well-known{
allow all;
}
access_log /www/wwwlogs/www.wrlod.com.log;
error_log /www/wwwlogs/www.wrlod.com.error.log;
}
在上面的配置中,ssl_certificate是用来配置https服务的。
proxy_pass http://127.0.0.1:8888; 进行反向代理,也就是我们的uWSGI服务器需要启动监听8888端口来进行django项目运行。
uWSGI服务器配置文件如下:
[uwsgi]
master = true
processes = 1
threads = 2
chdir = /www/wwwroot/www.wrlod.com/web/
http = 0.0.0.0:8888
logto = /www/wwwroot/www.wrlod.com/web/logs/error.log
chmod-socket = 660
vacuum = true
master = true
max-requests = 1000
[uwsgi]
http = :8000 # 服务器地址和端口
chdir = xxxx # django代码的根目录
home = xxxx # virtualenv的目录
env = DJANGO_SETTINGS_MODULE=xxxx #使用settings
wsgi-file = xxx/wsgi.py #wsgi.py的路径,wsgi.py是通过startapp创建的
processes = 2 # worker的数量
threads = 2 # 每个worker的线程数
daemonize=xxxx/xxxx.log #log文件
pidfile=xxx/xxxx.pid #pid文件,用来控制uwsgi的reload和stop
其中chdir是我们的django项目根目录。
location ~ ^/(static)/ {
root /www/wwwroot/www.wrlod.com/web/blog;
}
上面的语句实现了对静态文件的目录指定,如果我们的静态文件放在了其它路径,这里对应配置即可。