2010-08-08 3 views
10

Я только что настроил nginx для обслуживания статического запроса на одном сайте, но у меня много сайтов на моем сервере, и мне интересно, должен ли я исправлять новые Конфигурация сервера nginx для всех из них? Что я сейчас делаю. У меня есть файл со всеми виртуальными хостами записей для Apache с некоторыми-вещи, как это:Apache и окончательная конфигурация для nginx для правильного обслуживания всех виртуальных хостов

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> 

У меня есть это в ports.conf Апача:

Listen 8080 

И поэтому я создал Nginx для работы с одной сайта (sky2high.net), созданный следующий настроить файл (/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; 
} 
} 

И это прекрасно работает для этого домена, но, конечно, еще виртуальные хосты сломана.

Итак, вопрос заключается в следующем: существует ли опция конфигурации для nginx, ведьма может помочь обрабатывать весь запрос со всех виртуальных хостов (домены) и правильно обслуживать их? Я имею в виду, что опция, которая позволяет не писать файлы конфигурации separete для каждого виртуального хоста (со всеми этими удвоенными файлами, такими как root и index options), но только для всех виртуальных хостов?

PS: Должен ли я переместить вопрос на сервер?

ОБНОВЛЕНИЕ: Эмм .. Интересно, как это работает, но это так. Я сделал следующие конфигурационные файлы:

/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/*; 
} 

и

/и т.д./Nginx/сайты с поддержкой/по умолчанию

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 не понимаю, как это работает, но это ...

ОБНОВЛЕНИЕ 2: или это не работает! Я посмотрел на «верх» в консоли и заметил, что apache обслуживает не только запрос php, но и для статического контента. =

ответ

7

Теперь вы отправляете весь сетевой трафик на 127.0.0.1:8080 без разрешения Nginx обслуживать статические файлы

То, что вы должны попробовать это следующее:.

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; 
} 

И proxy.conf вы положили следующее:

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; 

Это Shoul d работа для вас

+1

Вы можете изменить одну строку на: proxy_set_header хоста $ хоста: $ proxy_port; – dalore

2

Только мои два цента, в большинстве случаев нет необходимости указывать listen 80.

Источник: Nginx common Pitfalls