server_name bug

Gena Makhomed gmm at csdoc.com
Thu Oct 30 18:28:48 MSK 2008


On Thursday, October 30, 2008 at 13:22:31, MZ wrote:

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

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

M> Может Вы не в курсе, но кроме ip-based виртхостов
M> есть ещё и name-based ! В которых поле заголовка
M> Host: не! должно игнорироваться.

server {
  listen *:80;
  server_name site.com;
  server_name *.site.com;
}

server {
  listen 10.20.30.40:80;
  server_name site.com;
  server_name mail.*;
}

если listen *:80; будет включать в себя listen 10.20.30.40:80;
в каком из серверов должен обрабатываться запрос Host: mail.site.com ?
а в каком из них запрос Host: site.com ? а если запрос придет на адрес
10.20.30.40 или на адрес 10.20.30.50 (этот ip попадает в первый listen)

очень хотелось бы узнать ответ для всех 4-х вариантов запроса
( 2 ip x 2 host ) и почему nginx должен вести себя именно так.

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

M> Специально разработали новый HTTP протокол для этого,
M> потому что на одних ip-based виртхостах далеко не уедешь.

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

M> Не хотите использовать name-based виртхосты - не пишите
M> в конф директив server_name. Логично ? Логично !

совсем не логично. директива ServerName например присутствует
даже в ip-based виртуалхостах Apache, аналогично это и в nginx.

тут есть такое понятие, как "основное имя сервера", которое может
использоваться, например, для редиректов. (server_name_in_redirect)

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

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

M> Так вот, мое предложение состоит в том чтобы выбросить из вашего
M> определения часть "кроме явно определенных в других директивах server".
M> Т.е. будет означать просто "все ip:port".

M> Вы все ещё настаивате на том что сможете привести пример когда такое
M> изменение сделает невозможным определить нужную вам конфигурацию ?
M> Тогда приведите его (пример).

пока подожду ответа на первый вопрос ( про mail.site.com / site.com )
чтобы лучше понять какие именно изменения предлагается внести в nginx.

идеально будет если Вы сможете сформулировать новый алгоритм работы
nginx после внесения в него предлагаемых изменений, и в чем
это будет отличаться от существующего сейчас поведения.

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

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

это не обязательно делать вручную. если конфиг стал слишком большим и
сложным - можно написать скрипт для автоматической генерации конфига,
это будет намного удобнее, чем вручную править большой конфиг nginx`а.

кроме того, есть еще один нюанс - listen на явно определенный ip адрес
работает быстрее, чем listen *:80, следовательно, - если задумываться
о максимальной производительности - лучше явно указывать ip адреса.

и я вообще, честно говоря, не понимаю сути этой проблемы с listen *:80;
проблема в том, что приходится много времени тратить на редактирование
конфигурационных файлов в текстовом редакторе, или же проблема в том,
что теперешнее поведение nginx кажется нелогичным и неправильным?

M> ЗЫ: Прошу прощения за резкий тон, не стоит это считать за попытку
M> нанести оскорбление. Рассчитываю на взаимопонимание и конструктивный
M> диалог.

резкий тон конструктивному диалогу не способствует.

-- 
Best regards,
 Gena






More information about the nginx-ru mailing list