Django学习之路(七)生产环境中的使用

来源:互联网 发布:淘宝女装素材 编辑:程序博客网 时间:2024/04/28 21:14

基本思路

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 nginxCentos上:yum install nginx

启动Nginx

service nginx start #启动service nginx stop #关闭service nginx restart #重启

在阿里云的centos中安装nginx时候发现无法启动,最后发现是http的端口被占用。这时候可以输入命令停止占用端口的服务:

systemctl stop httpdsystemctl 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-develyum install python-develpip install uwsgi

不建议使用yum或者apt-get。

连接uwsgi与Django

通过Django与uwsgi可以形成了一个简单的web服务器。想要完成这一个环节,需要在打开manage.py的同级目录,新建django_wsgi.py文件。

# coding: utf-8import osimport sys# 将系统的编码设置为UTF8reload(sys)sys.setdefaultencoding('utf8')os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")#mysite替换为自己的项目名#启动django的服务import djangodjango.setup()from django.core.handlers.wsgi import WSGIHandlerapplication = 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 reloadservice nginx restart

打开manage.py同级目录下的命令行:

uwsgi -x django_socket.xml

最后就可以在浏览器中通过服务器ip访问网页。

阅读全文
0 0
原创粉丝点击