ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Особенность обработки server_name



On Thu, 9 Feb 2006, Vyacheslav Kokorin wrote:

Версия nginx/0.3.20

Задача: Разрешить проксировать только один виртуальный хост,
остальные запретить.

Выдержка из конфиг файла, отвечающего за виртуальные хосты.

   server {
       listen  80.93.56.xx:80;
       server_name server.new.local;
       location / {
           access_log  /var/log/nginx-access.log; #off;
           proxy_pass  http://backend:8080/;
   }
   server {
       listen  80.93.56.xx:80;
       location / {
           deny all;
       }
   }

server.new.local имеет соответствующую запись в /etc/hosts на клиентской
машине.

Проблема в том, что при такой схеме запрос на IP 80.93.56.xx с любым server_name
проксируется на backend.

Если переставить местами блоки server { ... },  то всё работает корректно.

В принципе, ничего страшного нет - нужной функциональности можно
добиться и так, но ведь, по идее, запрос на backend не должен
проходить по условию несовпадения server_name. Или я что-то упустил?

Нужно у второго сервера в listen поставить default:

http://sysoev.ru/nginx/docs/http/ngx_http_core_module.html#listen
http://sysoev.ru/nginx/docs/virtual_hosts.html


Ещё есть директива restrict_host_names [on|off|close], но похоже её
нужно упразднять, так как желаемый эффект лёгко достигается с помощью
отдельного сервера и return 444 (для close).


Игорь Сысоев
http://sysoev.ru



 




Copyright © Lexa Software, 1996-2009.