Назад | Перейти на главную страницу

Nginx + PHP-FPM псевдоним URI и несколько каталогов php

Я пытаюсь настроить Nginx для размещения нескольких приложений на основе PHP в двух разных каталогах в одном домене. Результат, которого я пытаюсь достичь:

http: //webserver.local/ > приложение обслуживается из /path/to/website

http: //webserver.local/app > приложение обслуживается из /path/to/php-app

Вот конфигурация, которая у меня есть.

Кто-нибудь может пролить свет на то, где я ошибаюсь? Спасибо :)

server {
    listen       80;
    server_name  webserver.local;

    location / {
        root   /path/to/website;
        index  index.php;

        location ~ \.php$ {
            root           /path/to/website;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    }

    location ^~ /app {
        alias   /path/to/php-app;
        index  index.php;

        location ~ \.php$ {
            root           /path/to/php-app;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
}

Ваш вложенный location ~ \.php$ block не найдет ваши скрипты PHP. В $document_root установлен на /path/to/php-app. И $fastcgi_script_name такой же как $uri который по-прежнему включает /app префикс.

Правильный подход - использовать $request_filename и удали свой фальшивый root заявление:

location ^~ /app {
    alias   /path/to/php-app;
    index  index.php;

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME $request_filename;
    }
}

Всегда включать fastcgi_params перед любым fastcgi_param операторы, чтобы избежать их тихой перезаписи содержимым включаемого файла. Видеть этот документ для подробностей.