[emerg] duplicate listen options for X.X.X.X:80 in /usr/local/etc/nginx/nginx.conf:9

Илья Шипицин chipitsine at gmail.com
Mon Sep 8 03:54:42 UTC 2014


да, идея выдавать WARNING при отсутствии явного default_server хороша.
как и идея все уникальные параметры разрешать только для default_server

6 сентября 2014 г., 19:00 пользователь Gena Makhomed <gmm at csdoc.com> написал:
> On 06.09.2014 14:01, Vadim A. Misbakh-Soloviov wrote:
>
>>> если я 2 раза (или 1 раз) укажу spdy - работать будет всегда в двух
>>> случаях и ошибки конфигурации не будет.
>>> кажется, что с фильтрами подобная логика была бы уместна.
>>>
>>> ну и, раз уж оно все равно работает во всех случаях, вероятно, имеет
>>> смысл выдавать warning, если указано не во всех (вдруг кто-то будет
>>> полагать, что в одном месте у него spdy, а в другом нет).
>
>
> Да, это было бы вполне логично. Иначе - зачем давать юзеру возможность
> выборочно не-указывать параметр spdy, если он всеравно применится везде.
>
> То же самое относится и к параметру ssl - хотя и "listen 1.2.3.4:443;"
> в конфиге, но соединения всеравно принимаются только по протоколу https.
>
>> Обычно это делается так:
>> в дефолтном catch-all вхосте указываются все эти уникальные опции (которые
>> указываются один раз), а у остальных — неуникальные.
>
>
> Только из документации совсем не понятно, какие из параметров listen
> являются уникальными для сервера, а какие - общими для всех серверов.
>
> Похоже, что только опция default_server является специфичной
> для сервера, а все остальные - и так общие для всех серверов будут.
>
> | В директиве listen можно также указать несколько дополнительных
> | параметров, специфичных для связанных с сокетами системных вызовов.
> | Эти параметры можно задать в любой директиве listen, но только один
> | раз для указанной пары адрес:порт.
>
> Что только еще больше добавляет путаницы. Прописали параметр
> в каком-то одном случайном сервере - а применяется этот параметр
> потом во всех серверах с такой же комбинацией ip:port в listen.
>
> Идеальным вариантом с точки зрения легкости чтения/сопровождения
> конфига было бы требовать наличия параметра default_server всегда,
> если в конфиге присутствует более одного сервера на каком-то сокете.
>
> И все параметры, которые можно задать только один раз - можно задать
> только в том единственном сервере, который помечен как default_server,
> а общие параметры ssl, spdy и proxy_protocol должны быть указаны
> в каждом сервере или ни в одном из них. Если эти условия
> не выполняются - тогда пользователю выдается warning.
>
> В результате чтобы понять как работает тот или иной сервер -
> надо будет прочитать в конфиге определения максимум двух серверов.
>
> Обратная совместимость не теряется, потому что это только warning,
> который не блокирует работу сервера со старой версией конфигурации.
>
> Сейчас - надо просмотреть определения вообще всех серверов на этом
> сокете и в случае неочевидной конфигурации - никаких варнингов нет.
>
> --
> Best regards,
>  Gena
>
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru


Подробная информация о списке рассылки nginx-ru