本文服务器为腾讯云 Ubuntu 16.04 64位
服务器环境:Python2.7 Django==1.8.4 或 1.9.2 virtualenv,Virtualenv安装教程
1.安装nginx
sudo apt-get install nginx
我在安装的时候提示没有权限写入文件,所以是在su 转为root超级用户的情况下进行安装的
安装后文件存放在/usr/sbin/nginx配置文件在 /etc/nginx/nginx.conf
nginx常用命令(在root用户下)
启动nginx
/usr/sbin/nginx
关闭nginx
/usr/sbin/nginx -s stop
在安装nginx的时候可能还需要一些依赖包
安装openssl
sudo apt-get install openssl libssl-dev
安装pcre
sudo apt-get install libpcre3 libpcre3-dev
安装zlib
sudo apt-get install zlib1g-dev
2. 安装uwsgi,在virtualenv环境下安装,也可以不使用virtualenv
workon 环境名
pip install uwsgi
uwsgi的常用命令:
启动uwsgi
uwsgi --ini 文件名.ini
关闭uwsgi
uwsgi --stop 文件名.pid
安装完之后可以在项目根目录下新建一个测试文件对uwsgi进行测试
文件名为test.py
def application(env, start_response): start_response('200 OK',[('Content-Type', 'text/html')]) #return ['Hello world'] # Python2 return [b'Hello world'] # Python3通过命令采用http方式来进行测试
uwsgi --http 0.0.0.0:8000 --wsgi-file test.py
然后打开浏览器输入你的ip地址:8000就能看到Hello world
如果出现端口占用的情况可以用命令
ps -ajx|grep 端口号
查看当前的占用情况,然后再用
kill -9 pid号
关闭占用的进程
3.在django项目文件下新建uwsgi.ini(名字可以任意起,后缀是固定的)
关于django项目的创建,大家都到环境部署了,应该都会了,这里就不赘述
django的static文件的配置:
在settings.py中添加
STATIC_ROOT = '/var/www/项目名/static/' ‘’内的地址为服务器存放static的地址,还必须有读写权限,没有的话就给个chmod 777 文件夹名
然后再运行下静态文件收集 python manage.py collectstatic
进行uwsgi.ini的配置
[uwsgi]
socket=0.0.0.0:8000 #0.0.0.0这个网上的文章都说要填自己的ip, 但实际上我是填了0.0.0.0才能访问,8000这个端口号就自己设置,通过nginx配置的话一定要socket
#http=0.0.0.0:8008 #如果不通过nginx代理的话就注释socket,把http写上
chdir=/home/ubuntu/项目名 #这个填写django项目所在的文件夹
wsgi-file=项目名/wsgi.py #django项目文件中wsgi.py的位置
processes=1 #进程数,根据自己服务器的配置进行设置
threads=1 #线程数,根据自己服务器的配置进行设置
master=True
pidfile=uwsgi.pid #uwsgi.pid 记录uwsgi的pid,在关闭uwsgi的时候需要用到
daemonize=uwsgi.log #uwsgi的日志存放地址,可以自己选择文件地址
要进行测试配置之前,需要在django中runserver一下,确保项目是能正常运行的(接下来的调试都是在virtualenv环境下进行的,因为uwsgi是安装在virtualenv环境下的)
因为现在还没配置nginx,所以我们可以先用http进行测试,将uwsgi.ini中的socket注释掉,把http写出来,然后输入命令
uwsgi --ini uwsgi.ini
此时可以打开浏览器,输入服务器ip地址:端口号,如118.24.xx.165:8000 进行查看,如果能显示页面,那说明uwsgi配置正常
如果打不开,可查看uwsgi.log文件,查看原因,基本会出现的情况是:①端口被占用,kill占用端口的进程就可以②ip地址不能被assignment,ip地址(即socket跟http)改为0.0.0.0就可以
如果测试的时候选用的是用socket的话,页面会打不开,查看日志会显示
spawned uWSGI worker 3 (pid: 10771, cores: 1)
spawned uWSGI worker 4 (pid: 10772, cores: 1)
spawned uWSGI worker 5 (pid: 10773, cores: 1)
invalid request block size: 21573 (max 4096)...skip
invalid request block size: 21573 (max 4096)...skip
这是正常情况,因为本来需要接受nginx传送过来的socket,但是因为nginx还没配置,接受到的是http,所以就会报错
4.配置nginx
打开nginx的配置文件,地址为/etc/nginx/nginx.conf,我把我整个配置都拷出来
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
//这段是我们要添加的
server {
listen 80; # 监听端口,也是我们访问网站时输入的端口号,默认为80
server_name 118.24.xx.165; # 服务器名字,也就是我们访问网站时在地址栏输入的名字,填自己ip
server_name www.xxxxo.club; # 跟上面一样,可以填写自己的域名,监听的是80端口时,server_name一定要填正确的ip跟地址,如果是监听其他端口就可以随意填
client_max_body_size 75M;
location / {
include /etc/nginx/uwsgi_params; # 填写uwsgi_params的地址,这个文件用来关联uwsgi
uwsgi_pass 0.0.0.0:8000; # 填写在uwsgi.ini中socket一样的地址,网上说填自己的ip,但试验过要填0.0.0.0才能正常使用
uwsgi_read_timeout 2;
}
location /static {
alias /var/www/online21/static/; # 填写static的存放目录
}
location /media {
alias /var/www/online21/media/; # 填写media的存放目录
}
}//
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
#mail {
# # See sample authentication script at:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# server {
# listen localhost:110;
# protocol pop3;
# proxy on;
# }
#
# server {
# listen localhost:143;
# protocol imap;
# proxy on;
# }
#}
配置完成之后,重启nginx跟uwsgi就可以正常访问了,在浏览器中输入你的服务器ip或者域名就能访问,如果出现的是nginx的页面,那就是uwsgi没配置好,如果访问不了,就是nginx或nginx跟uwsgi都出问题了