2010-08-08 3 views
10

Je viens de configurer nginx pour servir une requête statique sur un site, mais j'ai beaucoup de sites sur mon serveur et je me demande, devrais-je droit nouveau configuration du serveur nginx pour chacun d'eux? Ce que je fais maintenant. Je fichier avec toutes les entrées d'hôtes virtuels pour Apache avec quelques-chose comme ceci:Apache et la configuration ultime pour nginx pour servir tous les hôtes virtuels de la bonne manière

NameVirtualHost *:8080 
<VirtualHost *:8080> 
ServerName sky2high.net 
DocumentRoot /home/mainsiter/data/www/sky2high.net 
</VirtualHost> 

<VirtualHost *:8080> 
ServerName surdo.asmon.ru 
DocumentRoot /home/surdo/data/www/surdo.asmon.ru 
</VirtualHost> 

<VirtualHost *:8080> 
ServerName surdoserver.ru 
DocumentRoot /home/surdo/data/www/surdoserver.ru 
</VirtualHost> 

J'ai ce dans ports.conf apache:

Listen 8080 

Et donc j'ai mis en place nginx pour travailler avec un site (sky2high.net), le fichier de configuration suivant créé (/etc/nginx/sites-enabled/sky2high.net):

server { 
listen 80; 
server_name sky2high.net www.sky2high.net; 
    proxy_pass http://127.0.0.1:8000; 
    proxy_set_header Host $host; 

access_log /var/log/nginx.access_log; 

location ~* \.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|xml|docx|xlsx)$ { 
    root /home/mainsiter/data/www/sky2high.net/; 
    index index.php; 
    access_log off; 
    expires 30d; 
} 
location ~ /\.ht { 
    deny all; 
} 
location/{ 
    proxy_pass http://127.0.0.1:8080/; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-for $remote_addr; 
    proxy_set_header Host $host; 
    proxy_connect_timeout 60; 
    proxy_send_timeout 90; 
    proxy_read_timeout 90; 
    proxy_redirect off; 
    proxy_set_header Connection close; 
    proxy_pass_header Content-Type; 
    proxy_pass_header Content-Disposition; 
    proxy_pass_header Content-Length; 
} 
} 

Et cela fonctionne très bien pour ce domaine, mais bien sûr, un autre des hôtes virtuels cassé. Donc, la question est: existe-t-il une option de configuration ultime pour nginx, qui peut aider à gérer toutes les requêtes, de tous les hôtes virtuels (domaines) et les servir de la bonne manière? Je veux dire, une option qui permet de ne pas écrire des fichiers de configuration séparés pour chaque hôte virtuel (avec tout ce truc doublé comme les options root et index), mais seulement un pour tous les hôtes virtuels? PS: devrais-je déplacer la question à serverfault? Emm .. Je me demande comment ça marche, mais ça l'est. Je l'ai fait venir les fichiers de configuration:

/etc/nginx/nginx.conf

user www-data; 
worker_processes 2; 

error_log /var/log/nginx/error.log; 
pid  /var/run/nginx.pid; 

events { 
    worker_connections 1024; 
} 

http { 
    include  /etc/nginx/mime.types; 
    default_type application/octet-stream; 

    access_log /var/log/nginx/access.log; 

    sendfile  on; 
    #tcp_nopush  on; 

    #keepalive_timeout 0; 
    keepalive_timeout 65; 
    tcp_nodelay  on; 

    gzip    on; 
    gzip_min_length 1000; 
    gzip_proxied  any; 
    gzip_disable  "msie6"; 

    include /etc/nginx/conf.d/*.conf; 
    include /etc/nginx/sites-enabled/*; 
} 

et

/etc/nginx/sites-enabled/default

server { 
    listen 80; 

    location/{ 
     proxy_pass http://127.0.0.1:8080/; 
     proxy_redirect off; 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header Connection close; 
     proxy_pass_header Content-Type; 
     proxy_pass_header Content-Disposition; 
     proxy_pass_header Content-Length; 
    } 
} 

I ne comprends pas comment ça marche, mais c'est ...

MISE À JOUR 2: ou ça ne marche pas! J'ai cherché à "top" dans la console et metioned que apache sert non seulement la demande php, mais pour le contenu statique soit = ​​(

Répondre

7

Ce que vous faites maintenant envoie tout le trafic réseau à 127.0.0.1:8080 sans permettre Nginx pour servir les fichiers statiques

Ce que vous devriez essayer est le suivant:.

server { 
listen 80; 
server_name sky2high.net www.sky2high.net; 
location/{ 
proxy_pass http://127.0.0.1:8080; 
include /etc/nginx/conf.d/proxy.conf; 
} 
location ~* ^.+\.(jpg|jpeg|gif|png|ico|tgz|gz|pdf|rar|bz2|exe|ppt|txt|tar|mid|midi|wav|bmp|rtf) { 
root /folder/to/static/files; 
expires 90d; 
} 
location ~* ^.+\.(css|js)$ { 
root /folder/to/static/files; 
expires 30d; 
} 

Et proxy.conf vous mettre:

proxy_redirect off; 
proxy_set_header Host $host; 
proxy_set_header X-Real-IP $remote_addr; 
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
client_max_body_size 8m; 
client_body_buffer_size 256k; 
proxy_connect_timeout 60; 
proxy_send_timeout 60; 
proxy_read_timeout 60; 
proxy_buffer_size 4k; 
proxy_buffers 32 256k; 
proxy_busy_buffers_size 512k; 
proxy_temp_file_write_size 256k; 

Cette Shoul d travailler pour vous

+1

Vous pouvez modifier une ligne à: proxy_set_header hôte $ host: proxy_port de $; – dalore

2

Juste mes deux cents, dans la plupart des cas, il n'est pas nécessaire de spécifier le listen 80.

Source: Nginx common Pitfalls

Questions connexes