質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Q&A

1回答

1762閲覧

nginxのlocationタグが効かない

SatoKenta

総合スコア38

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

0グッド

0クリップ

投稿2023/01/23 12:07

編集2023/01/23 12:14

事象

nginxで、/healthzに来た通信を別のドキュメントルートに行くようにしたいのですが、うまくいきません。
404が返ってきてしまいます。

$ curl http://localhost/healthz/index.html % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0<html> <head><title>404 Not Found</title></head> (以下略)
  • ログには[error] 32#32: *1 open() "/etc/nginx/html/healthz/index.html" failed (2: No such file or directory)と出ます。
  • 設定ファイルは以下の通りで、/healthzのrootに/usr/share/nginx/htmlと記載しているのにログでは**/etc/nginx/html**を読み込みに行っているので、locationがうまく読み込まれていないように見えます。
  • conf.d/default.confでコメントアウトしているlocation /を元に戻すとちゃんと200で返ってくるので、default.conf自体が読み込まれていないわけではなさそうです。
  • conf.dに余計なファイルがないかは確認しました。

設定ファイル

nginx.conf

user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; keepalive_timeout 65; include /etc/nginx/conf.d/*.conf; }

conf.d/default.conf

server { listen 80; listen [::]:80; server_name localhost; error_page 403 /403.html; error_page 404 /404.html; location /healthz { root /usr/share/nginx/html; } # このコメントアウトを戻すとちゃんと動く #location / { # root /usr/share/nginx/html; #} error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }

/usr/share/nginx/html

satken@debian11:~$ ls -la /usr/share/nginx/html drwxr-xr-x 3 satken satken 4096 Jan 23 20:55 . drwxr-xr-x 3 satken satken 4096 Jan 23 21:11 .. -rw-r--r-- 1 satken satken 5 Jan 23 20:42 index.html

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

上記の定義(location, rootの組み合わせ)だと、/usr/share/nginx/html/healthz/index.htmlにアクセスしてしまい、404 errorにならないでしょうか?(/etc/nginx/html/にアクセスしている理由が不透明なため、定義とアクセスの時系列を合わせたログを貼って頂くのも良いのではないかと思います)。

例えば、aliasを使うような定義だとどうでしょうか。一例ですが、

nginx

1server { 2 listen 80; 3 listen [::]:80; 4 server_name localhost; 5 error_page 403 /403.html; 6 error_page 404 /404.html; 7 8 location /healthz { 9 alias /usr/share/nginx/html; 10 index index.html; 11 } 12 13 location / { 14 root /usr/share/nginx/html; 15 } 16 17 error_page 500 502 503 504 /50x.html; 18 location = /50x.html { 19 root /usr/share/nginx/html; 20 } 21} 22

のような定義で、curl http://localhost/healthz/index.htmlとするなど。

投稿2023/01/23 12:56

編集2023/01/23 12:59
knuser

総合スコア178

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問