Re: [Unit] Миграция с fastcgi и её подводные камни

Валентин Бартенев vbart на nginx.com
Вт Июл 2 17:59:02 UTC 2019


On Tuesday 02 July 2019 20:49:30 Valentin V. Bartenev wrote:
> On Tuesday 02 July 2019 10:21:53 Vadim A. Misbakh-Soloviov wrote:
> > Здравствуйте!
> > 
> > Пытаясь смигрировать очередной проект с PHP-FPM на Unit я в очередной раз 
> > столкнулся с проблемой того, что у fastcgi есть такая полезная штука как 
> > split_path_info, где можно задать какая часть URI является значением 
> > SCRIPT_NAME (да и вообще существует возможность динамического формирования 
> > этого значения при запросе), а какая - идёт в PATH_INFO.
> 
> Есть мысль реализовать PATH_INFO в PHP-модуле по типу AcceptPathInfo
> в Apache и fastcgi_split_path_info ^(.+\.php)(.*)$; в nginx.
> 
> https://httpd.apache.org/docs/2.4/mod/core.html#acceptpathinfo
> 
> Вопрос, есть ли случаи, когда нужно что-то отличное от ^(.+\.php)(.*)$?
> 
> 
> > 
> > Сама по себе переменная PATH_INFO (как доступное значение для приложения 
> > внутри массива $_SERVER) - ещё пол беды. Есть, конечно, приложения, которые 
> > рассчитывают на него, но это вторично по отношению к тому, что ну уж **очень** 
> > не хватает возможности динамически задавать значение "script" (aka SCRIPT_NAME 
> > в fcgi) для приложения в Юните.
> 
> Сейчас, если не указывать "script", то он формируется из URI, а если URI
> заканчивается на /, то к нему добавляется значение "index".
> 
> 
> > 
> > Т.е. чтобы весь URI как есть передался в сообщённый в заголовках (ну а как 
> > ещё? Не вижу иного способа передать информацию Юниту от NgX) скрипт.
> > 
> > Без такой возможности приходится городить по 100500 блоков application для 
> > каждого потенциально возможного "script" (хардкодить все значения, в общем). 
> > Что, если честно, делает меня грустной пандой.
> > 
> > Соответствено, сопровождение большинства приложений, которые из коробки 
> > работают с ЧПУ (а таких нынче большинство) превращается в пытку :'(
> > А уж если они ещё и о SEO решают заботиться по примеру вордпресса и внаглую 
> > редиректить запросы типа "/scriptname.php?$uri" на "/?$uri" (явно полагаясь на 
> > то, что SCRIPT_NAME им передаётся и так), всё выходит на новый уровень...
> > 
> > В общем, подскажите, пожалуйста:
> > 1) есть ли возможность как-то передавать значения конфигурационных директив 
> > приложения в заголовках запроса?
> > 2) каковы шансы того, что если п.1 не является осуществимым сейчас, вы это 
> > сделаете по реквесту из списка рассылки? :)
> > 2а) и каковы шансы того, что это произойдёт в ближайших релизах? :)
> [..]
> 
> На самом деле самый правильный способ разруливать все эти хитросплетения
> способов адресации php скриптов - это написать единый index.php для всего
> приложения, на который направлять все запросы и там уже разбирать на
> составляющие и подключать необходимые скрипты.
> 
> Почему сами php-разработчики приложений так не делают - для меня большая
> загадка.  Однако приходится иметь дело с тем, что есть.
> 
> Проблема необходимости гибко настраивать все переменные запроса - вполне
> понятна.  Сейчас появился роутинг и на его базе уже планируется сделать
> возможность переопределения этих переменных.
> 

Задел кнопку и письмо ушло раньше времени.

PATH_INFO в простом виде, типа fastcgi_split_path_info ^(.+\.php)(.*)$
думаю сделаем уже в ближайшем релизе к концу месяца.

Более хитрую конфигурацию для переопределения произвольных переменных из
маршрутов стоит ожидать не раньше осени.

Концепция заключается не в том, чтобы передавать всё из nginx в заголовках,
раскладывая запрос в нём всякими сложными правилами, а получать запрос как
есть в исходном виде (от nginx или напрямую от клиента) и дальше уже вычленять
из него всё необходимое.  Плюс что-то типа realip-модуля для случаев нахождения
Unit-а за реверсивным прокси.

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


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