用于django项目的uWSGI + nginx,跟踪uwsgi的错误

我尝试在nginx + uwsgi,os-debian(3.1.0-1-amd64 x86_64),nginx 1.1.8-1,uwsgi 0.9.8.3-1configuration上尝试使用django的webserver:

<uwsgi> <socket>/tmp/uwsgi.sock</socket> <process>1</process> <master/> <enable-threads/> <uid>33</uid> <gid>33</gid> <pidfile>/tmp/uwsgi.pid</pidfile> </uwsgi> 

在文件/etc/uwsgi/apps-enabled/webapp.xml中configurationnginx

 location / { uwsgi_pass unix:///tmp/uwsgi.sock; include uwsgi_params; uwsgi_param UWSGI_SCRIPT webapp; uwsgi_param UWSGI_CHDIR /data/web/webapp/webapp; } 

所有projet在/ data / web / webapp / webapp /,这里setting.py,url等。 在/data/web/webapp/webapp/webapp.py

 import sys, os import django.core.handlers.wsgi sys.path.insert(0, '/data/web/webapp/webapp') os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' application = django.core.handlers.wsgi.WSGIHandler() 

uid和gid 33它是www数据用户尝试运行uwsgi as

root#uwsgi -s /var/run/uwsgi.sock -x /etc/uwsgi/apps-enabled/webapp.xml

 [uWSGI] parsing config file /etc/uwsgi/apps-enabled/webapp.xml *** Starting uWSGI 0.9.8.3-debian (64bit) on [Wed Dec 14 21:42:02 2011] *** compiled with version: 4.6.1 on 27 July 2011 18:25:51 writing pidfile to /tmp/uwsgi.pid uWSGI running as root, you can use --uid/--gid/--chroot options setgid() to 33 setuid() to 33 your memory page size is 4096 bytes unlink(): Permission denied [socket.c line 38] bind(): Address already in use [socket.c line 70] 

他们想要多大的权限? 和什么问题..如果我运行uwsgi作为根错误消失了,我明白了

  *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** your memory page size is 4096 bytes uwsgi socket 0 bound to UNIX address /var/run/uwsgi.sock fd 3 uwsgi socket 1 bound to UNIX address /tmp/uwsgi.sock fd 4 your server socket listen backlog is limited to 100 connections *** Operational MODE: single process *** *** no app loaded. going in full dynamic mode *** *** uWSGI is running in multiple interpreter mode *** spawned uWSGI master process (pid: 20732) spawned uWSGI worker 1 (pid: 20733, cores: 1) 

但是当我尝试访问服务器时,ngix返回502错误页面。 还有更多:nginx日志中的权限错误:

  2011/12/14 21:57:17 [crit] 20739#0: *1 connect() to unix:///tmp/uwsgi.sock failed (13: Permission denied) while connecting to upstream, client: 10.10.3.111, server: ******, request: "GET /favicon.ico HTTP/1.1", upstream: "uwsgi://unix:///tmp/uwsgi.sock:", host: "****.****.**" 

如果将运行时(www-data)中的/tmp/uwsgi.sock的所有者更改为nginix用户,则他写了其他日志

 [error] 20739#0: *21 upstream prematurely closed connection while reading response header from upstream, 

但仍然错误502(

如何解决这个问题? 有人可以帮助我..真的要用nginx + uwsgi而不是apache。 谢谢


然而,解决scheme是接近:)我现在使用tcp套接字,更改uwsgiconfiguration,并安装了几个包。 是一个重要的select – 自动加载。 现在uwsgi具有这样的configuration:

 <uwsgi> <module>webapp</module> <socket>127.0.0.1:5080</socket> <pythonpath>/data/web/webapp/webapp</pythonpath> <autoload/> <daemonize>/var/log/uwsgi_webapp.log</daemonize> <processes>1</processes> <uid>33</uid> <gid>33</gid> <enable-threads/> <master/> <harakiri>120</harakiri> <max-requests>5000</max-requests> </uwsgi> 

仍然要解决其他问题.. uwsgi使用不是主要的系统python版本> _ <

 option "pythonpath" found in plugin python26_plugin.so *** Starting uWSGI 0.9.8.3-debian (64bit) on [Thu Dec 15 22:52:23 2011] *** compiled with version: 4.6.1 on 27 July 2011 18:25:51 uWSGI running as root, you can use --uid/--gid/--chroot options setgid() to 33 setuid() to 33 your memory page size is 4096 bytes *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** uwsgi socket 0 bound to TCP address 127.0.0.1:5080 fd 4 Python version: 2.6.7 (r267:88850, Aug 3 2011, 12:02:14) [GCC 4.6.1] Python main interpreter initialized at 0xc47df0 threads support enabled your server socket listen backlog is limited to 100 connections *** Operational MODE: single process *** added /data/web/webapp/webapp/ to pythonpath. WSGI application 0 (SCRIPT_NAME=) ready on interpreter 0xc47df0 pid: 22983 (default app) *** uWSGI is running in multiple interpreter mode *** spawned uWSGI master process (pid: 22983) spawned uWSGI worker 1 (pid: 22984, cores: 1) 

他使用的是Python 2.6.7,但主系统版本是2.7.2,并且为此安装了所有的python模块,所以日志中的很多错误 – 重复的尝试导入不存在的,许多典型的错误之一:

  File "/usr/lib/python2.6/dist-packages/django/db/__init__.py", line 78, in <module> connection = connections[DEFAULT_DB_ALIAS] File "/usr/lib/python2.6/dist-packages/django/db/utils.py", line 93, in __getitem__ backend = load_backend(db['ENGINE']) File "/usr/lib/python2.6/dist-packages/django/db/utils.py", line 51, in load_backend raise ImproperlyConfigured(error_msg) django.core.exceptions.ImproperlyConfigured: 'django_mongodb_engine' isn't an available database backend. Try using django.db.backends.XXX, where XXX is one of: 'dummy', 'mysql', 'oracle', 'postgresql', 'postgresql_psycopg2', 'sqlite3' Error was: No module named django_mongodb_engine.base 

所以..如何设置为uwsgi的Python版本?

unix套接字必须遵守文件许可计划。 所以/ var / run必须可以通过www-data来写,而nginx必须能够读/写/var/run/uwsgi.sock

如果你不熟悉这种事情,你应该使用TCP套接字(选择一个端口,你准备好了)

如何设置为uwsgi python的版本?

在uwsgi设置中设置选项插件

 [uwsgi] ... plugins = python27 ...