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

基本思路

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>:8077socket>
    <chdir>path/to/yoursitechdir>
    <module>django_wsgimodule>
    <processes>4processes>  
    <daemonize>uwsgi.logdaemonize>
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访问网页。

你可能感兴趣的:(python,django,web开发)