Nginx+uwsgi+Django 搭建一个简单的web服务器

web服务器可以直接向用户提供图片、html等静态文件,但不能直接与Django中的python代码交互,所以在它们之间还需要一个中间人来将浏览器的请求传给python代码,并将python的执行结果返回给服务器去响应浏览器的请求。这个中间人就是WSGI,WSGI规定了一些服务器与python代码交互的接口,更像一种协议,而uWSGI是WSGI的一种实现。

本文要实现的一个请求/响应流程如下图所示:

web client  <---> nginx <---> socket <---> uwsgi <---> django

1、web client <---> nginx

这个流程跟django没有关系,主要是保证nginx是正常的。

安装

yum install nginx -y

安装成功后,启动nginx,然后在通过浏览器访问:http:127.0.0.1,如果没问题的话,会看到成功的提示页面,如果有不清楚的错误,可以通过tail -f /var/log/nginx/error.log来查看。

其他相关的常用命令:

rpm -ql nginx:查询nginx的安装路径
systemctl start nginx:启动nginx
systemctl restart nginx:重启nginx
systemctl satus nginx:查询nginx运行状态
netstat -apn|grep nginx:查询nginx占用的端口
可能会遇到nginx.pid没有权限/不存在的问题,这可能是因为nginx没启动,或没有权限去读nginx.pid,运行ps -ef|grep nginx看一下当前nginx程序是否是以nginx用户启动的,如果是的话,应该就是权限问题了,可以把nginx.conf中的user nginx改为user root,然后重启nginx。

2、uwsgi <---> django

这个流程跟nginx没关系,主要是测试uwsgi是否安装正确。

安装

下载:uwsgi-2.0.10.tar.gz,解压,然后运行python uwsgiconfig.py --build,安装完成。uwsgi的官方doc

以下用于测试的Django工程名为DjangoDemo,其结构如下图所示:

接下来运行uwsgi --http :8080 --module DjangoDemo.wsgi。然后通过浏览器访问http://127.0.0.1:8080。如果没问题的话,会显示DjangoDemo工程的首页。

3、通过socket把nginx和uwsgi连起来,即:nginx <---> socket <---> uwsgi

修改nginx配置文件:

vim /etc/nginx/nginx.conf

第一种配置:

upstream django {
    #server  unix:///root/workspace/DjangoDemo/demo.socket; # for a file socket
    server  127.0.0.1:8001; # for a web port socket (we'll use this first)
}


server {
    listen  8000 default_server;

    location / {
        uwsgi_pass  django;
        include     /etc/nginx/uwsgi_params;
    }

}
确定nginx正常,然后运行uwsgi --socket :8001 --module DjangoDemo.wsgi。如果没有问题的话,通过浏览器访问http://127.0.0.1:8000会看到DjangoDemo的首页。

如果因为socket端口而报错,可以尝试关掉SELINUX:

vi /etc/selinux/config

#SELINUX=enforcing #注释掉

#SELINUXTYPE=targeted #注释掉

SELINUX=disabled #增加

:wq! #保存退出

setenforce 0 #使配置立即生效
第二种配置:借助socket文件

upstream django {
    server  unix:///root/workspace/DjangoDemo/demo.socket; # for a file socket
    #server  127.0.0.1:8001; # for a web port socket (we'll use this first)
}


server {
    listen  8000 default_server;

    location / {
        uwsgi_pass  django;
        include     /etc/nginx/uwsgi_params;
    }

}
运行uwsgi --socket demo.socket --module DjangoDemo.wsgi,然后在DjangoDemo的目录下会看到一个空的demo.socket文件。正常的话,通过浏览器访问http://127.0.0.1:8000会看到DjangoDemo的首页。如果有权限问题,尝试运行uwsgi --socket demo.socket --module DjangoDemo.wsgi --chmod-socket=664。

至此,整个流程就走通了。

参考:

http://uwsgi-docs.readthedocs.org/en/latest/tutorials/Django_and_nginx.html

http://segmentfault.com/q/1010000002492487

http://uwsgi-docs.readthedocs.org/en/latest/Install.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值