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 ...

Was dit nuttig?

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

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top