【django】Nginx+uWSGI+Django部署我的博客网站

一.前言

我们通常将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求。然后nginx把所有静态请求自己来处理(这是NGINX的强项),并将将所有非静态请求通过uwsgi传递给Django,由Django来进行处理,从而完成一次WEB请求。

可见,uwsgi的作用就类似一个桥接器。

二.工作环境

Ubuntu14.04 LTS

Django1.8

三.安装,测试uwsgi

$ export LDFLAGS="-Xlinker --no-as-needed"
$ pip install uwsgi

编写程序test.py:

# test.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return "Hello World"

执行shell命令:

uwsgi --http :8000 --wsgi-file test.py

访问网页:

http://127.0.0.1:8000/

如果网页上显示Hello World,则运行正确。

四.配置django

编写django_wsgi.py文件,将其放在与文件manage.py同一个目录下。

注意,os.environ.setdefault(“DJANGO_SETTINGS_MODULE”, “blog.settings”)中,blog为项目名~

#!/usr/bin/env python
# coding: utf-8

import os
import sys

# 将系统的编码设置为UTF8
reload(sys)
sys.setdefaultencoding('utf8')

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

from django.core.wsgi import get_wsgi_application 
application = get_wsgi_application()

假设我们已经在项目的目录下了(即django_wsgi.py所在目录),执行:

uwsgi --http :8000 --chdir ./ --module django_wsgi

打开浏览器中访问你的Django程序了,所有的请求都是经过uwsgi传递给Django程序的(此时静态文件貌似是访问不了的~)

五.配置uWSGI

为了实现Nginx与uWSGI的连接,两者之间将采用soket来通信。

这里,我们将使用uWSGI配置文件的方式来改进uWSGI的启动方式。

假定你的程序目录是 /home/work/testdjango/mysite

我们将要让Nginx采用8077端口与uWSGI通讯,请确保此端口没有被其它程序采用。

在 /home/work/testdjango/mysite下新建一个XML文件djangochina_socket.xml:

<uwsgi>
    <socket>:8077</socket>
    <chdir>/home/work/testdjango/mysite</chdir>
    <module>django_wsgi</module>
    <processes>4</processes> <!-- 进程数 --> 
    <daemonize>uwsgi.log</daemonize>
</uwsgi>

在上面的配置中,我们使用 uwsgi.log 来记录日志,开启4个进程来处理请求。

六.安装,配置Nginx

 $ sudo apt-get install nginx

我们假设你将会把Nginx程序日志放到你的目录/home/work/testdjango/mysite/logs/下,请确保该目录存在。

我们假设你的Django的static目录是/home/work/testdjango/mysite/blog/static/ ,请确保这些目录存在。

我们假设你的域名是 localhost。

我们假设你的域名端口是 80(在调试时你可以设置一些特殊端口如 8070)

基于上面的假设,我们为conf/nginx.conf添加配置。
(用whereis nginx查看下nginx的目录,在其目录下即可找到conf/nginx.conf这个配置文件。注意,可能conf下有一个叫做conf/nginx.conf.default的文件,我们把它的名字改掉,不然系统默认使用这个文件)

user root

server {

        listen   80;
        server_name localhost;
        access_log /home/work/testdjango/mysite/logs/access.log;
        error_log /home/work/testdjango/mysite/logs/error.log;

        location / {
         include        uwsgi_params;
         uwsgi_pass     127.0.0.1:8077;
        }

        #error_page 404 /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        location /static/ {
            alias  /home/work/testdjango/mysite/blog/static/;
            index  index.html index.htm;
        }
    }

于是,Nginx将处理静态文件(/static),非静态文件请求Nginx会发给 socket 8077,然后让uWSGI来进行处理。

七.运行

在完成上面配置后,需要按以下步骤来做:

重启Nginx服务器,以使Nginx的配置生效。

nginx -s  reload

重启后检查Nginx日志是否有异常。

启动uWSGI服务器

cd /home/work/testdjango/mysite

uwsgi -x djangochina_socket.xml

检查日志 uwsgi.log 是否有异常发现。

访问服务

用浏览器访问localhost,如果发现程序与单独使用Django启动的程序一模一样时,就说明成功了~!

关闭服务的方法

方式1

#查询nginx主进程号
ps -ef | grep nginx
#从容停止   kill -QUIT 主进程号
#快速停止   kill -TERM 主进程号
#强制停止   kill -9 nginx

方式2

nginx -s stop  :快速停止nginx
nginx -s quit  :完整有序的停止nginx

你可能感兴趣的:(nginx,django,服务器,uwsgi)