Django + uwsgi + Nginx部署多个网站
在 Nginx 中,允许多个网站监听同一个端口,通过在浏览器中输入的地址来区分访问的是哪一个网站内容。通过Nginx配置文件nginx.conf
,添加server{}
实现,具体可以往下看。
1. 到阿里云中可以免费申请SSL证书,并下载Nginx版本的.key
,.pem
文件。通过 scp
命令传到自己的服务器/etc/nginx/cert/
路径下。
2. Django主配置目录中的settings设置(设置过的部分可以跳过不看)
DEBUG = False # 开发模式关闭
ALLOWED_HOSTS = ['www.mallknow.cn'] # 填入自己的域名或服务器ip地址
import os
# static files dir
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
# media files dir
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = 'media'
3. 归档static
文件(需要先配置好STATIC文件目录)
python3 manage.py collectstatic
4. 到/etc/nginx/nginx.conf
中对Nginx进行配置 (以我自己的网站为例)。注意修改文件时使用sudo权限修改。
...
http {
...
server {
listen 80;
server_name www.mallknow.cn;
rewrite ^(.*)$ https://${server_name}$1 permanent; # 重定向https
}
server {
listen 443 ssl;
server_name www.mallknow.cn;
ssl_certificate cert/www.mallknow.cn.pem; # .pem证书文件
ssl_certificate_key cert/www.mallknow.cn.key; # .key证书文件
# 以下可以直接复制粘贴
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
charset utf-8;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
uwsgi_pass 127.0.0.1:8001; # 转发到127.0.0.1:8001端口上,与django中uwsgi.ini中的配置要一致
uwsgi_read_timeout 60;
}
# 将Django的静态文件交给Nginx管理
location /static {
alias /home/mallknow/django/mallknow.cn/src/static;
}
# 同上
location /media {
alias /home/mallknow/django/mallknow.cn/src/media;
}
}
}
配置好保存后,可以在/etc/nginx/cert/
目录下通过/etc/init.d/nginx configtest
或sudo nginx -s reload
来测试是否有错误。显示OK
之后/etc/init.d/nginx start
启动Nginx服务。
5. 在Django项目下配置uwsgi.ini,放入根目录的scripts/
目录下
[uwsgi]
socket = 127.0.0.1:8001 # uwsgi的ip与端口
chdir = /home/mallknow/django/mallknow.cn/src # 项目根目录地址
wsgi-file = main/wsgi.py # 项目主配置下的wsgi.py
master = true
processes = 2
threads = 5
vacuum = true
启动uwsgi服务:
uwsgi --ini scripts/uwsgi.ini