Re: виртуал хосты и rewrite

Maxim Dounin mdounin на mdounin.ru
Вт Мар 15 17:26:45 MSK 2011


Hello!

On Tue, Mar 15, 2011 at 03:55:02PM +0200, andy karimov wrote:

> Столкнулся с такой проблемой.
> 
> Есть два виртуал хоста vhost1.com и vhost2.info
> У vhost2.info ранее было имя домена old.name.some.info, и для
> нормальной работы CMS у vhost2.info прописан редирект
> 
> rewrite ^(.*) http://vhost2.info$1 permanent;
> 
> все ровно работает до момента когда на vhost2.info понадобилось
> заливать файлы на 10 мб

У вас в server{} для vhost2.info вообще в конфиге не задан, запрос 
на vhost2.info будет обработан в сервере по умолчанию на 
соответствующем listen-сокете.  Т.е. в первом, описанном в конфиге 
(или где повезёт, если файлы с описаниями серверов подключаются 
через include), ибо явно сервер по умолчанию не задан.

> 
> тогда в конфиг было добавлено
> 
> client_max_body_size 12M;
> client_body_buffer_size 256k;
> 
> и ничего не работало, по логам было видно что nginx ругается при
> попытке аплоада на vhost2.info на то, что настройки vhost1.com не
> позволяют аплоадить такой размер (увы я логи стер)
> 
> как выяснилось если в конфиге vhost2.info убрать редирект и вписать
> имя vhost2.info в server_name то nginx нормально распознает
> виртуалхосты.
> 
> если оставить редирект то имя хоста на который редиректится нужно
> убирать из server_name иначе происходил loop и соответственно nginx
> неверно распознает виртуалхост
> 
> подскажите как и рыбку скушать и на велосипеде покататься ?

Начните с простого - почитайте тут:

http://nginx.org/en/docs/introduction.html

А уже потом начинайте конфигурировать.

> 
> nginx 0.8.54 и 0.9.5, Windows

Just in case: nginx под Windows в production - это выбор смелых.

> 
> 
> ==== vhost1
> server {
>   listen 80;
>   error_page   500 502 503 504  /50x.html;
>   location = /50x.html { root   html; }
> 
>   server_name vhost1.com;
>     location / {
>             access_log off;
>             proxy_set_header  Host    $http_host;
>             proxy_set_header    X-Real-IP    $remote_addr;
>             proxy_set_header    X-Forwarded-For    $proxy_add_x_forwarded_for;
>             proxy_pass   http://127.0.0.1:8088;
>                }
>        }
> ==== vhost1
> 
> 
> ==== vhost2
> server {
>   listen 80;
>   server_name *.vhost2.info old.name.some.info;
>   rewrite ^(.*) http://vhost2.info$1 permanent;

"rewrite ^(.*)" - срабатывает всегда, соответственно любой запрос 
в этот сервер будет перенаправлен.  Все тщательно описанные 
location'ы в этом сервере - не будут работать никогда и смысла не 
имеют.

>   error_page   500 502 503 504  /50x.html;
>   location = /50x.html { root   html; }
> 
>   location ~* \.(jpg|jpeg|gif|png|css)$ {
>             access_log off;
>             root c:/home/vhost2.info;
>             expires 3d;
>                }
> 
>     location / {
> 
>             client_max_body_size 12M;
>             client_body_buffer_size 256k;
> 
>             access_log off;
>             proxy_set_header  Host    $http_host;
>             proxy_set_header    X-Real-IP    $remote_addr;
>             proxy_set_header    X-Forwarded-For    $proxy_add_x_forwarded_for;
>             proxy_pass   http://127.0.0.1:8088;
> 
>             proxy_connect_timeout      30;
>             proxy_send_timeout         30;
>             proxy_read_timeout         30;
>                }
>        }
> 
> ==== vhost2

Maxim Dounin



Подробная информация о списке рассылки nginx-ru