我正在考虑用mod_wsgi部署Nginx。 不过我读了这个博客:
http://blogg.ingspree.net/blog/2007/11/24/nginx-mod-wsgi-vs-fastcgi/
在这里,nginx的mod_wsgi的作者说很less有工作线程可以被阻塞相当长的时间,等待你的脚本返回,这将减慢服务器。
这是多么真实? 我应该坚持fastcgi还是有更好的?
由于nginx是一个事件驱动的系统,它实际上是在最底层的单线程。 换句话说,使用Apache时prefork MPM没有太大的不同。 这意味着一旦在运行在nginx / mod_wsgi下的WSGI应用程序中处理了一个请求,就不能执行并行任务。
在Apache的prefork MPM中,这不是太严重的问题,因为Apache进程不会接受连接,除非它能够立即处理它,所以其他任何请求都将被另一个进程处理。 在nginx / mod_wsgi中情况并非如此,但是由于事件驱动系统的使用意味着它可以一次贪婪地接受许多请求,即使它在技术上一次只能处理一个请求。 然后,这些请求将被一次处理一个,所以后来被这个进程接受的请求将被延迟。
这个问题的进一步解释可以在下面find:
http://blog.dscpl.com.au/2009/05/blocking-requests-and-nginx-version-of.html
我build议使用fastCGI。 wsgi的最近更新是在2008年或更早)
用于fcgi的示例Django.conf:
# Django project server { listen 80; server_name www.server.com; location / { fastcgi_pass unix:/home/projectname/server.sock; # fastcgi_pass 127.0.0.1:8000; include conf/fastcgi.conf; access_log /logs/nginx_django.log main; } location ^~ /admin/ { fastcgi_pass unix:/home/projectname/server.sock; include conf/fastcgi.conf; allow 222.222.0.0/16; allow 111.111.111.111; deny all; access_log off; auth_basic "Gimme the key!"; auth_basic_user_file /etc/nginx_passwd; } location ~* ^.+\.(mpg|avi|mp3|swf|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|txt|tar|mid|midi|wav|rtf|mpeg)$ { root /home/projectname/media; limit_rate 2000K; access_log /logs/nginx_django_media.log download; access_log off; } location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|bmp|js)$ { root /home/projectname/static; access_log off; expires 30d; } } server { listen 80; server_name server.com; rewrite ^(.*)$ http://www.server.com$1; access_log /logs/nginx_django.log main; }
Fastcgi.conf
fastcgi_pass_header Authorization; fastcgi_intercept_errors off; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param QUERY_STRING $query_string; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param SERVER_NAME $server_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param REMOTE_USER $remote_user; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_SOFTWARE "nginx"; fastcgi_param GATEWAY_INTERFACE "CGI/1.1"; fastcgi_param UID_SET $uid_set; fastcgi_param UID_GOT $uid_got; # fastcgi_param SCRIPT_NAME $fastcgi_script_name;
最后:
su www -c“./manage.py runfcgi method = {threaded | prefork} {socket = / home / projectname / server.sock | host = 127.0.0.1 port = 8000} pidfile = / home / projectname / server.pid”
祝你好运!