<div dir="ltr">>>Правила наследования предельно просты: директивы наследуются с предыдущего уровня<br>>>только если не заданы на текущем.  Это позволяет делать конфигурацию явной, простой,<br>>>понятной с одного взгляда, избегая всевозможных сложных мерджей и сайд-эффектов.<br><br>Вот именно предельно просты, в нджинксе наследование дефолтовое. В ООП с наследованием жёстко связано и переопределение, а в нджинксе его нет.<br>Сам по себе fastcgi_param это многозначный параметр, и если в каком-то локейшене, грубо говоря, переопределили один из таких параметров это не должно влиять на остальные параметры, и причём тут мерджи ? Локейшен это последняя точка где применяются  все правила наследования. В случае с нджинксом он перезатирает все предыдущие и устанавливает новые. Суть многозначеного параметра при этом теряется и никакго мерджа там нет.<br><br>приведу тупой псевдо пример как логически я это вижу, учитывая сущности наследования.<br><br>server {<br><br>   # проинклудили fastcgi_parms и получили массив значений<br>  fastcgi_params_server_ctx # массив в контексте server<br>  {<br>        SCRIPT_FILENAME => /www/info.php,<br>        REQUEST_METHOD => $request_method,<br>        .......<br>        .......<br>        ...... etc<br>  }<br><br>  # Определяем локейшен<br>  location /info {<br>      fastcgi_params_location_ctx // масив в контексте location<br>      {<br>        SCRIPT_FILENAME => /www/info_overloaded.php,  <br>      }<br>      <br>      # В этой точке уже будет порисходить мердж двух массивов, банальный аппенд одного массива в другой с учётом перезаписи значений существующих ключей в родительском массиве (fastcgi_params_server_ctx), несуществующих - добавление.<br><br>      fastcgi_params_location_ctx = fastcgi_params_server_ctx (merge) fastcgi_params_location_ctx<br>      {<br>          SCRIPT_FILENAME => /www/info_overloaded.php, // переопределился параметр, а остальные остались не тронутыми<br>        REQUEST_METHOD => $request_method,<br>        .......<br>        .......<br>        ...... etc<br>      }<br><br>      fastcgi_pass <a href="http://127.0.0.1:9000">127.0.0.1:9000</a>;<br>      <br> <br>      # Разве сложно смерджить ? разве это не логичное поведение наследования с возможностью расширения или перезаписи?<br>      # На данный момент в нджинксе нет понятия наследования конфигурации, только понятие дефолтового значения, или переопределение однозначных параметров (параметров которые в одном и том же контексте должны встречаться один раз). <br> <br>  }<br>}<br><br>>>избегая всевозможных сложных мерджей и сайд-эффектов.<br><br>какой может быть сайд -эффект от слияния двух массивов ? Локейшен - последняя точка, контексты у всех свои.<br><br> <br><br>>>Когда у вас понаследовалось все с множества уровней и непонятно, какая же в итоге<br>>>конфигурация применяется, пока не пробежишься по всем конфигам внимательно и не<br>>>отследишь все значения на всех уровнях.<div><br></div><div>что не понятно ? контексты разные где может быть путаница ?</div><div>main_ctx -> http_ctx -> server_ctx -> location_ctx { inner_location_ctx } (if ваще нужно удалить к чертям, вот оно и создаёт сайд-эффекты)</div><div><br></div><div>у каждого параметра есть строгие условия контекста использования. и наследование точно также происходит сверху-вниз. Вы же никогда не опишите location в контексте http. учитывая это всё, никаких конфликтов при слиянии быть не может и так и есть, просто наследование работает не так как хочется.</div><br>>>Эти правила были выработаны на горьком опыте.  По сравнению с этим, проблему<br>>>непонимания можно исправить, для этого нужно почитать документацию и ознакомиться с правилами.<div><br></div><div>На чьём горьком опыты ? на опыте разработчиков, которые хотят видеть продукт таким каким самим хочется, или опыте пользователей которые его используют ?</div><div>Читать документацию ? - прочитал и привёл отрывок из неё, и там явно описано, и то что там описано не сходится с понятием наследования, и логично было бы пересмотреть механизм наследования многозначных параметров.</div><div><br></div><div>Спасибо.</div><div><br>  <div><br></div><div><br><br></div></div></div>