[解決済み] Nginx -- rootとaliasによる静的ファイル提供の混乱
質問
にあるアプリサーバーを通じてアプリを提供する必要があります。
8080
そして、アプリサーバに触れることなく、ディレクトリから静的ファイルを作成します。nginxの設定は以下のような感じです。
# 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
を実行すると、再び動作し始めます。
どなたか説明してください。また、以下の2つの違いは何なのか、はっきりと冗長に説明してください。
root
と
alias
とその目的について説明します。
どのように解決するのですか?
とは非常に重要な違いがあります。
root
と
alias
ディレクティブを使用します。この違いは
root
または
alias
が処理されます。
の場合は
root
ディレクティブを使用します。
にフルパスが追加されます。
ロケーション部分を含む
一方
alias
ディレクティブを使用します。
の部分のみ、パス
ロケーション部分を含まない
がエイリアスに追加されます。
.
例えるなら
例えば、次のようなコンフィグがあるとします。
location /static/ {
root /var/www/app/static/;
autoindex off;
}
この場合、Nginxが導き出す最終的なパスは次のようになります。
/var/www/app/static/static
これは
404
は存在しないので
static/
内の
static/
で指定されたパスに、location の部分が付加されるからです。
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
は、既存の "real"パスを表すために新しいパスを定義することができます。位置の部分はその新しいパスなので、実際のパスに置き換えられるのです。シンボリックリンクのようなものだと考えてください。
一方、ルートは新しいパスではなく、いくつかの情報を含んでおり、それを他の情報と照合して最終的なパスを作成する必要があります。そのため、位置の部分は削除されずに使用されます。
の末尾にスラッシュを付けるケースは
alias
について、末尾のスラッシュが必須であるかどうかについての明確なガイドラインはありません。 Nginxのドキュメント しかし、ここや他の場所での人々の一般的な観察によると、そうであるようです。
この他にもいくつかの場所で議論されていますが、決定的なものではありません。
https://serverfault.com/questions/375602/why-is-my-nginx-alias-not-working
関連
-
[解決済み】Raspberry Piサーバーに対して小規模なDDoS攻撃を実行する【終了しました
-
Nginx] エラー413 Request Entity Too Largeの解決方法
-
nginx 414 リクエスト URI が大きすぎます。
-
Nginx設定ファイル(nginx.conf)の設定詳細
-
[解決済み] NGINXのproxy_passまたはproxy_redirect
-
[解決済み] React-routerとnginx
-
[解決済み] nginxが任意のドメイン名で応答するのはなぜですか?
-
[解決済み] MIMEタイプ "text/html "が重複している?
-
[解決済み] nginx client_max_body_size のデフォルト値です。
-
[解決済み] nginx 400 "The plain HTTP request was sent to HTTPS port" エラーへの対処法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] nginxリクエストで許容されるurlの長さを設定する方法 (エラーコード: 414, uri too large)
-
[解決済み] NGINXを設定して、サブルートで場所(同じサーバー名の下)に応じて異なるシングルページアプリケーション(SPA...すなわち静的ファイル)をデプロイする方法
-
[解決済み] バックグラウンドでリクエストするようにnginxを設定する
-
nginxの問題解決:上流からの応答ヘッダーの読み込み中に上流が接続を早々に切断した
-
Nginx+tomcatでhttps化した後に400 Bad Requestが発生する問題
-
Nginx設定ファイル(nginx.conf)の設定詳細
-
[解決済み】Kubernetes サービス 外部 ip 保留
-
[解決済み】nginxのsites-availableディレクトリが見つからない。
-
[解決済み] nginxです。[emerg] "server" ディレクティブはここでは許可されません。
-
[解決済み] MIMEタイプ "text/html "が重複している?