我想通过nginx运行几个虚拟主机,每个通过fcgi服务一个不同的django应用程序。 这可能吗? 如果是这样,有没有人有好的资源在哪里/如何开始? nginx的文档似乎大部分的例子,但没有一个特定的configuration,我正在尝试…
最近有两个关于设置nginx的相当不错的博客文章,但都使用nginx来提供静态(或缓存)的内容和Apache + mod_wsgi来服务Django。 我更喜欢这个,因为mod_wsgi使得进程管理比fcgi(其他优点)更容易。
无论如何,这里是帖子:
编辑:好的我挖出了一个旧的tar文件与我的nginx + django +虚拟主机配置文件从一年前,我切换到Apache + mod_wsgi。 这是一个开发机器,所以你要调整工人,连接等
nginx.conf:
user nginx nginx; worker_processes 2; error_log /var/log/nginx/error_log info; events { worker_connections 1024; use epoll; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] ' '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$gzip_ratio"'; client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m; connection_pool_size 256; client_header_buffer_size 1k; large_client_header_buffers 4 2k; request_pool_size 4k; gzip on; gzip_min_length 1100; gzip_buffers 4 32k; gzip_types text/plain text/html application/x-javascript text/xml text/css; output_buffers 4 32k; postpone_output 1460; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 75 20; ignore_invalid_headers on; include vhosts.d/*.conf; }
所以,主要的nginx.conf包含了vhosts.d /子目录中的每个文件。 我的一个文件是在localhost上运行PHP(可能是运行phpMyAdmin),如下所示:
vhosts.d / 00_localhost:
server { listen 127.0.0.1:80; server_name localhost; access_log /var/log/nginx/localhost.access_log main; error_log /var/log/nginx/localhost.error_log info; root /var/www/localhost/htdocs; index index.php index.html index.htm; location ~ .php$ { fastcgi_pass 127.0.0.1:8888; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/localhost/htdocs$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; } }
然后是一个本地的Django开发服务器,像这样:
50_django.local:
server { listen 80; server_name django.local; access_log /var/log/nginx/django.access.log main; error_log /var/log/nginx/django.error.log info; root /var/www/django.local; location ~* ^.+\.(mpg|avi|mp3|swf|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|txt|tar|mid|midi|wav|rtf|mpeg)$ { access_log off; break; } location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|bmp|js)$ { expires 30d; break; } location / { fastcgi_pass unix:/var/www/django.local/server.sock; include fastcgi.conf; } location ^~ /admin/ { fastcgi_pass unix:/var/www/django.local/server.sock; include fastcgi.conf; access_log off; auth_basic "Welcome to admin"; } }
最后,每个虚拟服务器都为每个位置包含一个fastcgi.conf。
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;
我不知道以上所有都是必需的,但这是我切换到mod_wsgi的另一个原因…卓越的支持和文档:)
由于这个问题被问到有人创建了一个pip可安装的django包,它会从你的settings.py中为你生成一个apache或nginx的vhost文件
pip install django-vhost
看看这里: https : //bitbucket.org/djangostars/django-vhost