Я пытаюсь настроить Nginx для размещения нескольких приложений на основе PHP в двух разных каталогах в одном домене. Результат, которого я пытаюсь достичь:
http: //webserver.local/ > приложение обслуживается из /path/to/website
http: //webserver.local/app > приложение обслуживается из /path/to/php-app
Вот конфигурация, которая у меня есть.
File Not Found
(однако файл находится по адресу /path/to/php-app/index.php
)./path/to/php-app/test.txt
(что-то не PHP), и когда я перехожу к http: //webserver.local/app/test.txt, Я получаю текстовый файл, как и ожидал.Кто-нибудь может пролить свет на то, где я ошибаюсь? Спасибо :)
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
операторы, чтобы избежать их тихой перезаписи содержимым включаемого файла. Видеть этот документ для подробностей.