同じドメインの2つの異なるディレクトリにある複数のPHPベースのアプリをホストするようにNginxを構成しようとしています。
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$
ブロックは、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
を含めてください。詳細は このドキュメント を参照してください。