the outside world <-> nginx <-> the socket <-> uwsgi <-> Django / test.py
下面,将一次介绍各软件的安装和配置(写脚本):
sudo pip install uwsgi --upgrade
#1: uwsgi --http ip:port --module mysite.wsgi
#2: uwsgi --socket /to/your/project/uwsgi.sock --chmod-socket=666 --wsgi-file test.py
#3: uwsgi --socket /to/your/project/uwsgi.sock --chmod-socket=666 --chdir /to/your/project --module mysites.wsgi
uwsgi --ini uwsgi.ini
ps ax | grep uwsgi
kill all -9 uwsgi
# django.ini file
[uwsgi]
# master
master = true
# maximum number of processes
processes = 10
# the socket (use the full path to be safe)
# socket 的具体放置位置
# 服务器开启时自动生成
socket = /to/yout/project/uwsgi.sock
# with appropriate permissions - *may* be needed
# 重要!对socket设置666权限,增删改除
# 如果没有设置,有可能网络访问不了,因为没有权限创建
chmod-socket = 666
# the base directory
chdir = /to/yout/project
# Django's wsgi file
# 因为 加了 chdir ,所有直接输入 project文件内的路径
# 注意! project.wsgi 中间是 “.” 而不是 “/”
module = project.wsgi
# the virtualenv
# home = /path/to/virtualenv
# clear environment on exit
vacuum = true
sudo apt-get install python-dev
sudo apt-get install nginx
#1: /user/local/nginx
#2: /etc/nginx/
#3: /etc/nginx/nginx.conf
#4:/var/log/nginx/ #放置nginx的log信息
nginx 的默认配置文件放置在 /etc/nginx/nginx-availale/ 内,监听端口默认80,所有http访问127.0.0.1:80后,会显示nginx的欢迎界面。
nginx -v
sudo service nginx start
sudo service nginx restart
sudo service nginx stop
sudo service nginx configtest #检查 nginx 配置文件正确性
假设:django项目( 项目名:project )放置的路径为 /to/your/project/
# mysites_nginx.conf
upstream boxx{ # 名字boxx可以被DIY
# connect to this socket
server unix:///to/your/project/uwsgi.sock; # 通过socket访问
# server 127.0.0.1:8001; # 通过http访问
# -.-! 如果运行在云平台, 此处应使用内网IP地址
}
server {
# 指定浏览器或api要访问的接口端口
# 你可以在浏览器输入 example.com:8000 访问网站
listen 8000;
# the domain name it will serve for
server_name example.com; # 代替为你的IP或域名
# -.-! 如果是运行在云平台,此处应使用内网IP地址
charset utf-8;
#Max upload size
client_max_body_size 75M; # adjust to taste
# Django media
location /media {
alias /to/your/project/media; # Django项目的media files路径
}
location /static {
alias /to/your/project/static; # Django项目的static files路径
}
# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass boxx; #名字boxx要和上面对应上
include /etc/nginx/uwsgi_params; #
}
}
#注意#
nginx 和 uwsgi 是怎么联系的呢?更具上面.ini 和 .conf文件,我们可以看到:
nginx.conf 里: server unix:///to/your/project/uwsgi.sock;
uwsgi.conf 里: socket = /to/yout/project/uwsgi.sock;
这两个变量指向同一个东西,这样就建立了联系
.conf 需要被连接到 /etc/nginx/sites-enable/目录下
假如,你的nginx.conf文件所在地址为 /to/your/prject/p_nginx.conf
那么,需要输入如下命令,让nginx开启时可以找到这个配置文件并运行
sudo ln -s /to/your/project/p_nginx.conf /etc/nginx/sites-enable/
检查你的nginx error log( 位置: /var/log/nginx/error.log ).
如果你看到如下信息,说明可能是权限问题导致网站无法访问(特别是你把sock文件放在/tmp目录下)
connect() to unix:///path/to/your/project/uwsgi.sock failed (13: Permission denied)
通过 修改chmod-socket的权限 , 可以避免
uwsgi --socket /tmp/uwsgi.sock --wsgi-file test.py --chmod-socket=644 # 666 permissions (very permissive)
如果单用uwsgi运行,ini配置文件里,直接写http地址和端口
# uwsgi.ini
http = IP:PORT
# uwsgi.ini
http = 127.0.0.1:8006
如果nginx+uwsgi运行,ini 的 conf配置文件里,分三种情况:
# -1- 指定ip和端口
# uwsgi.ini
socket = IP:PORT
# nginx.conf
upstream boxx{
server IP:PORT
}
# -2- 本地ip和端口
# uwsgi.ini
socket = 127.0.0.1:8003
# nginx.conf
upstream boxx{
server 127.0.0.1:8003
}
# -3- 指定uwsgi.sock
# uwsgi.ini
socket = /to/your/project/uwsgi.sock
# nginx.conf
upstream boxx{
server unix:///to/your/project/uwsgi.sock
}