Особенность обработки 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