Понял, еще один момент. А если мне надо получить такое поведение
http://example.com/api/test.php -> /vhosts/ example.com/public_html/api/web/test.php как будет более правильно реализовать такое поведение? Сейчас реализовал через set, но что то подсказывает, что это велосипед location ~/api/(.*\.php$) { set $file_path "$1"; error_page 406 = @fastcgi-api; return 406; } location @fastcgi-api { root /vhosts/example.com/public_html; fastcgi_param SCRIPT_FILENAME $document_root/api/web/$file_path; } 2016-06-09 14:02 GMT+03:00 Maxim Dounin <[email protected]>: > Hello! > > On Thu, Jun 09, 2016 at 01:40:28PM +0300, Alex Domoradov wrote: > > > Привет всем, > > > > столкнулся с казалось бы тривиальной задачей, для одного location надо > > задать root отличный от того, что задан на уровне server > > > > server { > > > > root /vhosts/example.com/public_html/web/; > > > > location ~/api/.*\.php { > > root /vhosts/dev-designer/public_html/api; > > add_header X-DEBUG "LOC-API-PHP" always; > > error_page 406 = @fastcgi; > > return 406; > > } > > > > location ~/api/ { > > add_header X-DEBUG "API" always; > > root /vhosts/example.com/public_html/api; > > } > > > > location ~ \.php$ { > > error_page 406 = @fastcgi; > > return 406; > > } > > > > location @fastcgi { > > add_header X-DEBUG "FAST-CGI" always; > > > > fastcgi_pass unix:/run/php/php5.6-fpm.sock; > > fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; > > ... > > } > > } > > > > но в таком случае, запрос попадает в @fastcgi, но при этом root у него > > остается дефолтный. При этом если я коментирую *error_page/return* в > > *~/api/.*\.php*, то я вижу что запрос попадает в этот location и root у > > него меняется, но почему то с учетом return root остается с уровня server > > Потому что то, какая конфигурация была задана в location'е, в > котором запрос обрабатывался ранее, не влияет на то, как он будет > обрабатываться после перенаправления в другой location. > > Конфигурация для обработки запроса задаётся полностью в конкретном > location'е. Наследование конфигурации - только на этапе её > парсинга с предыдущих уровней, не более того. > > > Гугл предлагает такой вариант > > > > > http://serverfault.com/questions/317641/nginx-multiple-document-roots-with-fastcgi > > > > хотелось бы узнать, это единственно верный способ решения данной задачи > > (использование вложенных локейшенов)? > > Нет, не единственный. В вашем случае проще всего будет завести > ещё один именованный location для обработки fastcgi, в котором и > указать нужный root: > > location ~/api/.*\.php { > root /vhosts/dev-designer/public_html/api; > add_header X-DEBUG "LOC-API-PHP" always; > error_page 406 = @fastcgi_api; > return 406; > } > > location @fastcgi_api { > root /vhosts/dev-designer/public_html/api; > fastcgi_pass ... > ... > } > > -- > Maxim Dounin > http://nginx.org/ > > _______________________________________________ > nginx-ru mailing list > [email protected] > http://mailman.nginx.org/mailman/listinfo/nginx-ru
_______________________________________________ nginx-ru mailing list [email protected] http://mailman.nginx.org/mailman/listinfo/nginx-ru
