Fwd: nginx-fastcgi-rewrite
Валентин Бартенев
vbart at nginx.com
Fri Nov 16 13:30:13 UTC 2012
On Friday 16 November 2012 16:39:23 Юрий Гончаров wrote:
> А магия таки есть
>
>
> location ~ ^(/[^/]+) {
> try_files $uri $1/accesspoint.php /public/accesspoint.php
> =405;
> include fastcgi_params_ru;
> set $myuri $uri;
> fastcgi_param REQUEST_URI $myuri;
> fastcgi_connect_timeout 3600;
> fastcgi_send_timeout 3600;
> fastcgi_read_timeout 3600;
> fastcgi_pass unix:/tmp/php.socket;
> client_max_body_size 100m;
> root /www/
> }
>
> При такой конфигурации set отрабатывает до try_files и сохраняется
> промежуточное значение как надо.
> Если этот же location переписать так что делать не set а
> сразу fastcgi_param REQUEST_URI $uri - тогда будет /public/accesspoint.php
> Получается param сетится уже после try_files а set в location ДО...Магия?
> :)
Директива set относится к модулю rewrite:
http://nginx.org/en/docs/http/ngx_http_rewrite_module.html
который сам по себе является одним большим "хаком", ибо его правила выполняются
императивно, в то время, как nginx пытается следовать декларативному стилю.
Порядок директив модуля rewrite имеет значение только между собой в рамках
одного блока location или server. Вы можете для пущей головоломки будущему
админу перенести set вообще в самый конец.
А чтобы не ломать себе голову, лучше по возможности избегать программирования
в конфигурации. К сожалению, эта дурная привычка есть у всех пользователей php
перешедших с apache.
Я и написал в конце: "ещё есть сотня вариантов это получить, той или иной
степени корявости". Вы один из таких вариантов наглядно привели.
--
Валентин Бартенев
http://nginx.com/support.html
http://nginx.org/en/donation.html
Подробная информация о списке рассылки nginx-ru