Re: Наследование fastcgi_param

Валентин Бартенев vbart at nginx.com
Fri Jun 26 13:47:52 UTC 2015


On Thursday 25 June 2015 02:04:33 Amanda Sproule wrote:
> >>Очень странная это feature, она больше похожа на bug
> >>Есть ли шансы, что этот bug будет исправлен в nginx?
> 
> 
> Я об этом же, и nginx игнорирует предыдущие fastcgi_param если в локейшене
> переопределить новый fastcgi_param.
> 
> И поэтому в моём случае PHP-FPM отвечал пустым ответом, так как ему
> передавался только fastcgi_param SCRIPT_FILENAME /www/info.php;
> А минимальный набор fastcgi_param:
> 
> fastcgi_param  REQUEST_METHOD     $request_method;
> 
> fastcgi_param SCRIPT_FILENAME /www/info.php;
> 
> как я и указал в топике.
> 
> И передачу этих параметров легко можно просмотреть в phpinfo(), что и
> подтвердило мою мысль. И никак такое поведение нельзя назвать механизмом
> наследования.
> 
> 
> >>Например, "аналогичная" по своей сути директива proxy_set_header
> 
> >>переопределяет существующее значение, а не добавляет еще один header.
> 
> И в ней такие же проблемы (фичи) недавно столкнулся када на уровне http
> прописал параметры от модуля http_realip_module.
> 
> В локейшене где происходил proxy_pass прописал proxy_set_header и модуль
> realip уже не передавал свои заголовки (в логах светился не айпи клиента, а
> самого сервера).
> 
> И опять таки про proxy_set_header в документации написано
> 
> """
> Директивы наследуются с предыдущего уровня при условии, что на данном
> уровне не описаны свои директивы proxy_set_header. По умолчанию
> переопределяются только два поля:
> 
> proxy_set_header Host       $proxy_host;
> proxy_set_header Connection close;
> 
> """
> 
> Спасибо. Хотелось бы услышть мнение разработчиков.
> 

Мнение было изложено много раз, стоит сходить все же по ссылкам, что были приведены
в первом же сообщении: http://mailman.nginx.org/pipermail/nginx-ru/2015-June/056217.html

Проблема она в головах.

Правила наследования предельно просты: директивы наследуются с предыдущего уровня
только если не заданы на текущем.  Это позволяет делать конфигурацию явной, простой,
понятной с одного взгляда, избегая всевозможных сложных мерджей и сайд-эффектов.

Когда у вас понаследовалось все с множества уровней и непонятно, какая же в итоге
конфигурация применяется, пока не пробежишься по всем конфигам внимательно и не
отследишь все значения на всех уровнях.  В итоге такое невозможно поддерживать,
когда конфигурация разрастается до огромных объемов.

Эти правила были выработаны на горьком опыте.  По сравнению с этим, проблему
непонимания можно исправить, для этого нужно почитать документацию и ознакомиться
с правилами.

--
Валентин Бартенев


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