基本思路
1,方案:Nginx+uwsgi
这个方案的大体思路就是:nginx作为服务器最前端,负责接收client的所有请求,统一管理。
静态请求由Nginx自己处理,非动态请求通过uwsgi传递给Django,由Django来进行处理,从而完成一次web请求。
2,通信请求:
the web client<->the web server(nginx)<->the socket<->uwsgi<->Django
配置Nginx
安装Nginx
Ubuntu上:
sudo install nginx
Centos上:
yum install nginx
启动Nginx
service nginx start #启动
service nginx stop #关闭
service nginx restart #重启
在阿里云的centos中安装nginx时候发现无法启动,最后发现是http的端口被占用。这时候可以输入命令停止占用端口的服务:
systemctl stop httpd
systemctl disable httpd
按照正常道理来说这样就可以直接通过服务器的IP来访问网页。
实际操作中又发现,在阿里云部署的nginx无法出现正常的网页“Welcome to nginx”。具体原因是需要在阿里云的安全组中添加80端口的权限。
http://blog.csdn.net/sinat_35537471/article/details/72355362
http://blog.csdn.net/KascLiyuan/article/details/73438093
以上网页有具体解决方案。
配置uwsgi
安装uwsgi:
#假如说缺少libxml2文件:
yum install libxml*
#假如说缺少python-devel
yum install python-devel
pip install uwsgi
不建议使用yum或者apt-get。
连接uwsgi与Django
通过Django与uwsgi可以形成了一个简单的web服务器。想要完成这一个环节,需要在打开manage.py的同级目录,新建django_wsgi.py文件。
# coding: utf-8
import os
import sys
# 将系统的编码设置为UTF8
reload(sys)
sys.setdefaultencoding('utf8')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")#mysite替换为自己的项目名
#启动django的服务
import django
django.setup()
from django.core.handlers.wsgi import WSGIHandler
application = WSGIHandler()
在编写django_wsgi.py文件后执行:
uwsgi --http:8000 --chdir /path/to/yourblog --module django_wsgi
这样,就可以在浏览器的8000端口访问django程序。所有请求都是经过uwsgi传递给Django程序。
此时是无法访问js/css静态文件,这些文件都将交给Nginx处理。
实现Nginx与uwsgi的连接
一,编写uwsgi配置文件
在manage.py同级目录下新建xml文件:django_socket.xml:
<uwsgi>
<socket>:8077</socket>
<chdir>path/to/yoursite</chdir>
<module>django_wsgi</module>
<processes>4</processes> <!-- 进程数 -->
<daemonize>uwsgi.log</daemonize>
</uwsgi>
以上开启4个进程来处理请求。占用端口8077。
二,Nginx配置
以上连接uwsgi与django,下面配置Nginx。
打开/etc/nginx/nginx.conf文件,添加以下内容:
server {
listen 80;
server_name 127.0.0.1
charset UTF-8;
access_log /var/log/nginx/myweb_access.log;
error_log /var/log/nginx/myweb_error.log;
client_max_body_size 75M;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8077;
uwsgi_read_timeout 2;
}
location /static {
expires 30d;
autoindex on;
add_header Cache-Control private;
alias path/to/yoursite/static/;
}
}
类似这样,nginx到底是如何与uwsgi产生关联,目前理解为这两行配置:
include uwsgi_params;
uwsgi_pass 127.0.0.1:8077
uwsgi_pass需要与本文django_socket.xml配置文件中的端口一致。
结尾
重新启动nginx
service nginx reload
service nginx restart
打开manage.py同级目录下的命令行:
uwsgi -x django_socket.xml
最后就可以在浏览器中通过服务器ip访问网页。