Nginx - ルートとエイリアスによる静的ファイル提供の混乱 質問する

Nginx - ルートとエイリアスによる静的ファイル提供の混乱 質問する

アプリを のアプリ サーバー経由で提供し8080、静的ファイルをアプリ サーバーに触れることなくディレクトリから提供する必要があります。

    # app server on port 8080
    # nginx listens on port 8123
    server {
            listen          8123;
            access_log      off;

            location /static/ {
                    # root /var/www/app/static/;
                    alias /var/www/app/static/;
                    autoindex off;
            }


            location / {
                    proxy_pass              http://127.0.0.1:8080;
                    proxy_set_header        Host             $host;
                    proxy_set_header        X-Real-IP        $remote_addr;
                    proxy_set_header        X-Forwarded-For  $proxy_add_x_forwarded_for;
            }
    }

これで、この設定ですべてが正常に動作するようになりました。rootディレクティブがコメント アウトされていることに注意してください。

をアクティブ化してから非アクティブ化するとroot、動作しなくなります。ただし、のalias末尾を削除すると、再び動作し始めます。/static/root

何が起こっているのか誰か説明してくれませんか?

ベストアンサー1

rootディレクティブとディレクティブの間には非常に重要な違いがあります。この違いは、 またはで指定されたパスが処理されるalias方法にあります。rootalias

root

  • 部品は部品locationに追加されますroot
  • 最終パス = root+location

alias

  • 部品は部品locationに置き換えられるalias
  • 最終パス =alias

説明する:

設定があるとしましょう

location /static/ {
    root /var/www/app/static/;
    autoindex off;
}

この場合、Nginxが導き出す最終的なパスは次のようになります。

/var/www/app/static/static

これは内部に404ないので戻ってくるだろうstatic/static/

これは、ロケーション部分が で指定されたパスに追加されるためですroot。したがって、 の場合root、正しい方法は次のとおりです。

location /static/ {
    root /var/www/app/;
    autoindex off;
}

一方、 ではalias、場所の部分は省略されます。そのため、構成では

location /static/ {
    alias /var/www/app/static/;
    autoindex off;           ↑
}                            |
                             pay attention to this trailing slash

最終的なパスは次のように正しく形成されます。

/var/www/app/static

ある意味、これは理にかなっています。 は、alias既存の「実際の」パスを表す新しいパスを定義できるだけです。場所の部分は新しいパスなので、実際のパスに置き換えられます。シンボリックリンクとして考えてください。

一方、ルートは新しいパスではなく、最終的なパスを作成するために他の情報と照合する必要がある情報が含まれています。そのため、場所の部分は削除されずに使用されます。

末尾にスラッシュを付ける理由alias

末尾のスラッシュが必須かどうかについての明確なガイドラインはありません。Nginx ドキュメントしかし、ここや他の場所の人々の共通の観察は、それがそうであることを示しているようです。

これについては他にもいくつかの場所で議論されていますが、決定的なものではありません。

https://serverfault.com/questions/376162/how-can-i-create-a-location-in-nginx-that-works-with-and-without-a-trailing-slas

https://serverfault.com/questions/375602/why-is-my-nginx-alias-not-working

おすすめ記事