Django -- 整合apachenginx

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django -- 整合apachenginx相关的知识,希望对你有一定的参考价值。

前面章节我们都是通过python manage.py runserver运行服务器,访问django,但这只适用于测试环境。当项目正式发布后,我们需要一个稳定可持续的服务器,比如apache、nginx等等。接下来我们将用apache、nginx启动服务器。

wsgi:一种实现了python解析的通用接口标准/协议,实现了python web程序与服务器交互。

uwsgi:他也是一种通信协议,是uWSGI服务器自有的协议;

uWSGI:一种python的web服务器,实现了uwsgi、WSGI两种协议,而uwsgi实现了WSGI、uwsgi、http等协议。apache、nginx都必须引用模块才能解析动态语言。只不过这两个具备很好的静态内容处理能力。

gunicorn/uwsgi:都是wsgi协议(python web server gateway interface)的实现,它们做的事情是协议转换,协议的一头是web app(如flask, django等framework的app),另一头是web server(如apache, nginx等);

gunicore/uwsgi在默认的情况下都是同步模型,但都比通常的web framework实现得好。

gevent是利用协程(greenlet库)实现的一个高性能异步IO的库,它做的事情就是实现异步模型。

====================================================================

Apache (wsgi模块)

yum  install mod_wsgi

https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/modwsgi/

<VirtualHost *:80>
    WSGIScriptAlias / /opt/simplecmdb/simplecmdb/wsgi.py
    WSGIDaemonProcess simplecmdb python-path=/opt/simplecmdb:/usr/lib64/python2.7/site-packages
    WSGIProcessGroup  simplecmdb
    Alias /static /usr/lib64/python2.7/site-packages/django/contrib/admin/static
    
<Directory /opt/simplecmdb/simplecmdb>
    <Files wsgi.py>
        Require all granted
    </Files>
</Directory>
<Directory /usr/lib64/python2.7/site-packages/django/contrib/admin/static>
    Require all granted
</Directory>
</VirtualHost>
WSGISocketPrefix /var/run/wsgi

nginx (gunicorn模块)

pip install gunicorn

server {
    listen       192.168.1.106:8000;
    server_name  node01;
    
    location /static/admin/ {
        root  /usr/lib/python2.6/site-packages/django/contrib/admin/;
        index  index.html index.htm;
    }
    location / {
        proxy_pass      http://localhost:8000;
    }
}

cd  ~/项目下/  &&  gunicorn 项目名.wsgi:application -D

如果访问不到,去掉-D后台模式,看是否执行成功;

另外查看见监听端口,至少两个一个是nginx配置启动的8000,一个是127.0.0.1的8000。

------------------------------------------------------------------------------------------------

uwsgi模块 :效率要比wsgi好的多的多

--------------------------------------------------------------------------------------------------------------

nginx (uwsgi模块)

pip install uwsgi

新建test.py文件,内容如下:

def application(env, start_response):
   start_response(‘200 OK‘, [(‘Content-Type‘,‘text/html‘)])
   return "Hello World"

运行:uwsgi --http 10.0.18.33:8001 --wsgi-file test.py

访问:10.0.18.33:8001 输出 Hello World 即成功。

cat /etc/uwsgi9090.ini 

[uwsgi]
socket = 127.0.0.1:8001
master = true         //主进程
vhost = true          //多站模式
no-site = true        //多站模式时不设置入口模块和文件
workers = 2           //子进程数
reload-mercy = 10     
vacuum = true         //退出、重启时清理文件
max-requests = 1000   
limit-as = 512
buffer-size = 30000
pidfile = /var/run/uwsgi9090.pid  
daemonize = /website/uwsgi9090.log

修改nginx配置文件:vim  uwsgi_django.conf 

server {
    listen     10.0.18.33:8001;
    server_name  uwsgi.django.test;
    
    location / {
        uwsgi_pass  127.0.0.1:8001     #必须和uwsgi中的设置一致
        uwsgi_param UWSGI_SCRIPT HelloWorld.wsgi; 
        #入口文件,即wsgi.py相对于项目根目录的位置,“.”相当于一层目录
        uwsgi_param UWSGI_CHDIR /qqqqqqqqq/python/django/HelloWorld; #项目根目录
        index  index.html index.htm;
        client_max_body_size 35m;
    }
}

启动:uwsgi --ini /etc/uwsgi9090.ini   &&   /usr/local/nginx/sbin/nginx

测试:首先查看端口是不是都起来了,然后访问http://10.0.18.33:8001/,出现django界面即可。

重启:fuser -k 8001/tcp   

-----------------------------------------------------------------------------------------------------

错误一:ImportError: No module named HelloWorld.settings 

unable to load app 0 (mountpoint=‘‘) (callable not found or import error)

解决:export PYTHONPATH=$PYTHONPATH:/qqqqqqqqq/python/django/HelloWorld ,因为在sys.path中找不到项目路径,当然加入到path的方法也很多,以上只是其中一种。

错误二:ImportError: No module named django.core.wsgi

unable to load app 0 (mountpoint=‘10.0.18.33:8001|‘) 

解决:vim /etc/uwsgi9090.ini  添加pythonpath = /usr/lib/python2.7/site-packages 即可

技术分享-----------------------------------------------------------------------------------------------------

技术分享




以上是关于Django -- 整合apachenginx的主要内容,如果未能解决你的问题,请参考以下文章

apachenginx实现反向代理

ApacheNGINX支持中文URL

Django框架代码和nginx的整合部署

ApacheNginx与Tomcat的区别

(服务运维)ApacheNginx原理和对比

PHP利用ApacheNginx的特性实现免杀Webshell