hoe om virtuele bedieners + fcgi vir Django nginx?
Vra
Ek wil graag 'n paar virtuele gasheer hardloop via nginx, elke dienende 'n ander Django app via fcgi. Is dit moontlik? Indien wel, Is daar iemand het 'n goeie hulpbronne op waar / hoe om te begin? Die nginx docs lyk meestal voorbeelde wees, maar nie een van die besonder config ek probeer ...
Oplossing
Daar is twee goeie blog boodskappe die afgelope tyd oor die opstel van nginx, maar albei gebruik nginx om statiese (of die kas) inhoud en apache + mod_wsgi om Django dien dien. Ek verkies hierdie myself omdat mod_wsgi maak proses bestuur soveel makliker as fcgi (onder ander voordele).
In elk geval, hier is die poste:
EDIT: ok ek uitgegrawe het 'n ou teer lêer met my nginx + Django + virtuele gasheer konfigurasielêers van 'n jaar gelede, voordat ek oorgeskakel na + mod_wsgi Apache. Dit was 'n ontwikkeling masjien, sodat jy sal wil hê om aan te pas # werkers, verbindings, ens.
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;
}
So, die belangrikste nginx.conf sluit elke lêer in die vhosts.d / subdirectory. Een van my lêers was vir die versorging van PHP op localhost (waarskynlik hardloop phpMyAdmin) soos volg:
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;
}
}
En dan 'n plaaslike Django ontwikkeling bediener soos volg:
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";
}
}
Ten slotte, elk van die virtuele bedieners ingesluit 'n fastcgi.conf vir elke plek.
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;
Ek is nie seker al die bogenoemde is nodig, maar dit was 'n ander een van die redes waarom ek oorgeskakel na mod_wsgi ... beter ondersteuning en dokumentasie:)
Ander wenke
Sedert hierdie vraag gevra iemand het 'n pit installeer Django pakket wat 'n apache of nginx vhost lêer vir jou sal genereer uit jou settings.py
pip install django-vhost
Check dit uit hier: https://bitbucket.org/djangostars/django-vhost