本文服务器为腾讯云 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都出问题了