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

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

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

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

Q&A

解決済

1回答

2110閲覧

NginxのリバースプロキシでのBasic認証が有効にならない

taro373

総合スコア189

nginx

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

0グッド

0クリップ

投稿2021/12/07 03:46

Dockerで起動したNginxのリバースプロキシにBasic認証を設定しています。
OSはCentOS7で、Docker のversionは 20.10.6です。

(DockerでWebサーバを立ち上げる経験がないまま、
必要に迫られてリバースプロキシを稼働させました。)

HOMEのreverse-proxyディレクトリに作成した下記のファイルをマウントしています
nginx.conf  default.conf  .htpasswd

$ docker run --name reverse_proxy \ -v /home/hoge/reverse-proxy/nginx.conf:/etc/nginx/nginx.conf \ -v /home/hoge/reverse-proxy/default.conf:/etc/nginx/conf.d/default.conf \ -v /home/hoge/reverse-proxy/htpasswd:/etc/nginx/conf.d/.htpasswd \ --rm -d -p 80:80 nginx

アクセスしてみると、認証のウインドウが表示されませんでした。
リバースプロキシの転送先が“正常”に表示されました(リバースプロキシとしては動作しています)
マウントが正常に行われているか確認すると、
default.confで指定した先に、.htpasswdは存在します。

$ docker ps --format "table {{.ID}} {{.Image}} {{.Names}}"|grep reverse 723f2a1b7dad nginx reverse_proxy $ docker exec -it reverse_proxy /bin/bash root@723f2a1b7dad:/# head -n 7 /etc/nginx/conf.d/default.conf server { listen 80; listen [::]:80; server_name localhost; auth_basic "closed site"; auth_basic_user_file /etc/nginx/conf.d/.htpasswd; root@723f2a1b7dad:/# cat /etc/nginx/conf.d/.htpasswd user:$apr1$otzTjy4a$mMYNVfbcySN63ZV6V6jdS1

パーミッションと所有者を変更してnginxをリロードしましたが、変化はありませんでした。

root@723f2a1b7dad:/# chmod 604 /etc/nginx/conf.d/.htpasswd root@723f2a1b7dad:/# chown nginx:nginx /etc/nginx/conf.d/.htpasswd root@723f2a1b7dad:/# service nginx reload Reloading nginx: nginx.

困ったときはログを見ろ、と探すとこうなっていました

root@723f2a1b7dad:/# ls -lh /var/log/nginx/access.log lrwxrwxrwx. 1 root root 11 Dec 2 10:59 /var/log/nginx/access.log -> /dev/stdout

どこに設定に誤りや不足があるのでしょうか?
エラーメッセージも表示される、ログを見つけられないので、調べようがなく壁にぶつかりました。
原因の調べ方だけでもご教示いただければ助かります。

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

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

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

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

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

CHERRY

2021/12/07 04:44

docker イメージで、stdout , stderr にログが出力されているのであれば、 docker logs でログが表示されませんか?
taro373

2021/12/07 06:42

ありがとうございます docker logs コンテナID でログは表示されました が、その中にエラーメッセージ的な情報は出力されていませんでした
taro373

2021/12/07 07:23 編集

「server_name localhost;  と書いた下にBASIC認証の指定をしても、効かなかった」 ですね そうか、それはそうですね。default.confはいじらなくて良かったのですね。 理解が進みました ありがとうございました。
guest

回答1

0

自己解決

nginx.conf に .htpasswd の指定を移しました。
リバースプロキシの機能(アクセスしてきた“名前”によって転送先を切り分ける部分)を
記述したファイルに移しました。

[nginx.conf] http { server { listen 80; server_name hoge.org; location / { auth_basic "closed site"; auth_basic_user_file /etc/nginx/conf.d/.htpasswd; proxy_pass http://hoge.org:4201/; proxy_redirect off; (別の名前の転送先の指定に続く)

default.confに書いていたのですがこちらはコメントアウトしました。
これでBasic認証が動作するようになりました。

[default.conf] server_name localhost; #auth_basic "closed site"; #auth_basic_user_file /etc/nginx/conf.d/.htpasswd;

Nginxの扱いが初めてで、「Nginx Basic認証」で検索して、追記したのですが
リバースプロキシで複数のサイトに転送している部分で間違えた?ようです。

理解はまだまだこれからですが、急遽やりたかったことは実現できましたので
報告します
質問を閲覧された方、 CHERRYさんありがとうございました。

投稿2021/12/07 07:19

taro373

総合スコア189

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問