web-dev-qa-db-ja.com

メインドメインとは異なるWebアプリを提供するためにNginxでURIを構成する方法は?

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を見つけようとするため、「入力ファイルが指定されていません」というエラーが発生し、見つかりません。

1
user1271930

サブディレクトリ内から異なるドキュメントルートでアプリを提供するには、プレフィックスの場所で^~修飾子を使用して、他の正規表現の場所ブロックが競合を引き起こさないようにする必要があります。詳細については このドキュメント をご覧ください。

アプリが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/を付ける必要があります。そうしないと、メインアプリのリソースがロードされます。

0
Richard Smith