Django【部署】uwsgi+nginx
uwsgi
遵循wsgi协议的web服务器
uwsgi的安装
pip install uwsgi
uwsgi的配置
项目部署时,需要把settings.py文件夹下的:
DEBUG = FALSE ALLOWED_HOSTS = ['*']
新建一个文件 uwsgi.ini 在项目目录下与manage.py 同级
[uwsgi] #使用nginx连接时使用 #socket=127.0.0.1:8080 #直接做web服务器使用 http=127.0.0.1:8080 #项目目录 chdir=/Users/smart/Desktop/dj/bj17/dailyfresh #项目中wsgi.py文件的目录,相对于项目目录 wsgi-file=dailyfresh/wsgi.py # 指定启动搞得工作进程数 processes=4 # 指定工作进程中线程数 threads=2 master=True # 保存启动之后主进程的pid pidfile=uwsgi.pid # 设置uwsgi后台运行,uwsgi.log保存日志信息 daemonize=uwsgi.log # 设置虚拟环境的路径 virtualenv=/Users/smart/.virtualenvs/dailyfresh
uwsgi 的启动和停止
启动:uwsgi --ini 配置文件路径 例如:uwsgi --ini uwsgi.ini
停止:uwsgi --stop uwsgi.pid 路径 例如:uwsgi --stop uwsgi.pid
nginx命令
重新加载命令
nginx - s reload
nginx 配置转发请求给uwsgi
location / { # 包含uwsgi的请求参数 include uwsgi_params; # 转交请求给uwsgi uwsgi_pass uwsgi服务器的ip:port; }
nginx配置处理静态文件
django settings.py中配置收集静态文件路径:
STATIC_ROOT=收集的静态文件路径 例如:/var/www/dailyfresh/static;
django 收集静态文件的命令:
python manage.py collectstatic
执行上面的命令会把项目中所使用的静态文件收集到STATIC_ROOT指定的目录下。
收集完静态文件之后,让nginx提供静态文件,需要在nginx配置文件中增加如下配置:
如果/var/www/dailyfresh/static/ 没有权限 就赋予权限 chmod 777
location /static { # 在/var/www/ 下新建目录dailyfresh/static/ # 指定静态文件存放的目录 alias /var/www/dailyfresh/static/; }
nginx转发请求给另外地址
在location 对应的配置项中增加 proxy_pass 转发的服务器地址。
如当用户访问127.0.0.1时,在nginx中配置把这个请求转发给172.16.179.131:80(nginx)服务器,让这台服务器提供静态首页。
配置如下:
# 等号= 表示严格精确匹配
# 传递请求给静态页面服务器的nginx
location = /{ proxy_pass http://172.16.179.131; }
nginx配置upstream实现负载均衡
ngnix 配置负载均衡时,在server配置选项卡的前面增加upstream配置项。
不在server配置选项中。
dailyfresh 名字可以随意
upstream dailyfresh { server 127.0.0.1:8080; server 127.0.0.1:8081; }
然后在server选项中修改为location /为下面
location / { include uwsgi_params; # uwsgi_pass 127.0.0.1:8080; uwsgi_pass dailyfresh; }