Несоответствия пути PHP-скрипта в nginx с несколькими корневыми путями сервера

Я немного борюсь с некоторыми настройками nginx. По сути у меня есть одна папка файловой системы (/remote) который размещает веб-контент на /но помимо этого я хочу виртуальные пути /w а также /wiki который будет размещать экземпляр MediaWiki из совершенно другой папки файловой системы (/local).

Другими словами, я пытаюсь обработать URL-адреса следующим образом:

  • /anything.php -> Беги /remote/anything.php
  • /wiki/anything -> Переписать на /w/index.php?title=anything
  • /w/index.php -> Беги /local/mediawiki/index.php

Причина этого в том, что я помещаю код MediaWiki во временное хранилище (воссоздаемое при каждой загрузке), но файлы данных (и остальная часть сайта) находятся в постоянном хранилище, поэтому имеют другой путь.

Я получаю путаницу из-за нескольких корневых путей сервера.

Если я сделаю это:

location /w/ {
    alias /local/mediawiki;

    location ~ [^/]\.php(/|$) {
        ...
        fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;

Затем, согласно документации nginx, запрос /w/blah.php должен иметь /w упал так, что он подается из /local/mediawiki/blah.php, Однако, хотя это может происходить со статическими файлами, это не происходит с файлами FastCGI, потому что SCRIPT_FILENAME говорит PHP запустить /local/mediawiki/w/blah.php - не отрубает /w часть - поэтому PHP FPM возвращает 404, поскольку он не может найти .php файл.

Вместо этого я попытался использовать rewrite но это тоже не работает:

location /w/ {
    rewrite ^/w/(.*)$ /mediawiki/$1 last;
}
location /mediawiki/ {
    internal;
    root /local;
    ...

На этот раз SCRIPT_FILENAME правильно установлено на /local/mediawiki/blah.php кроме того, что другие переменные теперь меняются, так SCRIPT_NAME а также DOCUMENT_URI становиться /mediawiki/blah.php вместо /w/blah.php, что не правильно, поскольку они не относятся к URL-адресам запроса.

Что мне не хватает? Есть ли способ установить SCRIPT_FILENAME лучше сопоставить файл, который определил nginx, без необходимости использовать правила перезаписи?

1 ответ

Можете ли вы опубликовать полный конфиг NGINX? Я думаю, что это должно быть что-то вроде этого

location ~ ^/(wiki|w)/ {
    root /local/mediawiki;
}

Чтобы рассказать больше, мне нужно понять, как вы передаете скрипты в php.

Другие вопросы по тегам