Domain.tldでCMSを実行しています。
ここで、domain.tld/appから別のアプリを提供するようにNginxを構成したいと思います。
メインドメインのCMSは、domain.tld/appに対する要求を処理すべきではありません。
これはメインアプリのサーバーブロックで実現できますか?
server {
server_name domain.tld;
root /var/www/html/domain.tld;
...
location /app {
root /var/www/html/app;
...
location .php {
...
}
}
}
そして質問は、何を代わりに置くかについてです...
現在、/ var/www/html/app/app/index.phpからindex.phpを見つけようとするため、「入力ファイルが指定されていません」というエラーが発生し、見つかりません。
サブディレクトリ内から異なるドキュメントルートでアプリを提供するには、プレフィックスの場所で^~
修飾子を使用して、他の正規表現の場所ブロックが競合を引き起こさないようにする必要があります。詳細については このドキュメント をご覧ください。
アプリがPHPを使用する場合、ネストされたロケーションブロックを使用して、異なるroot
を継承できます。
たとえば(これは単なる出発点です):
location ^~ /app {
root /var/www/html;
index index.php;
try_files $uri $uri/ /app/index.php;
location ~ \.php$ {
try_files $uri =404;
include ...; # this is your system's fastcgi_params file
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_pass ...; # this is a socket or IP:port for php-fpm
}
}
特定のインストールに依存するため、いくつかの...
を残しました。物理ファイルを見つけるためにroot
がURIに追加されるため、/app/index.php
は/var/www/html/app/index.php
に配置されます。
最後に、アプリはサブフォルダーで実行されることを知っている必要があります。リソースファイル(.js
や.css
など)を要求する場合、URIの前に/app/
を付ける必要があります。そうしないと、メインアプリのリソースがロードされます。