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

Igor Sysoev is at rambler-co.ru
Thu Feb 9 13:00:01 MSK 2006


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





More information about the nginx-ru mailing list