server_name bug

Gena Makhomed gmm at csdoc.com
Wed Oct 29 22:23:46 MSK 2008


On Wednesday, October 29, 2008 at 15:59:23, MZ wrote:

M> Можете считать мене непрофессионалом, но я ожидаю что веб-сервер
M> который заявляет что *:80 будет матчить запросы для указанного
M> server_name для всех ипов будет действительно их матчить,
M> а не игнорировать после добавления нового виртхоста.

алгоритм работы у listen такой же как и у server_name - сначала
ищется полное соответствие, и если его нет, тогда проверяется *.

M> И лично я не вижу никаких причин почему запрос пришедший
M> не в wildcard-сокет должен игнорировать виртхосты с *:80,
M> если отвлечься от того, как устроены сокеты.

потому что кроме name-based virtual-host`ов есть еще и ip-based.
и для них поле заголовка "Host:" - вообще должно игнорироваться.

поскольку явной директивы для разделения виртуальных хостов
на ip-based и name-based в nginx нет, остается только listen.

M> Все-таки дело имеется с http-запросами, в которых кроме всякого
M> присутствуют и заголовки, такие как Host: . Так что теперь,
M> раз у нас есть сокеты то наплевать на http-протокол ?

http-протоколы бывают разные. в версии 0.9 поля Host: вообще нет.
поэтому не надо чинить то, что не сломалось и нормально работает.

M> Кто-нибудь сможет привести реальный пример
M> когда требуется именно такое поведение как сейчас?

сейчас директива listen *:port означает "все остальные ip:port,
кроме явно определенных в других директивах server", и это имеет
смысл и дает возможность для маневра, когда часть ip - динамические.

если сделать предлагаемые изменения, тогда listen *:port
превращается в syntactic sugar, обычную макроподстановку,
и внутренне будет замещаться на список всех ip адресов.

если конфиг nginx стал таким большим и сложным, что приходится
тратить много времени и сил на поддержание его в актуальном состоянии,


-- 
Best regards,
 Gena






More information about the nginx-ru mailing list