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

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

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

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

nginx

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

Q&A

解決済

1回答

8847閲覧

NginxのBasic認証が動作しない

sika

総合スコア52

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

nginx

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

0グッド

0クリップ

投稿2019/02/20 17:33

下記のURLを参考にNginxで指定ドメインのルートをBasic認証管理の設定を行いましたが、
Nginxの再起動等は問題なく動作するのですが、ページにアクセスしてもBasic認証が機能しません。

Nginx : Basic認証の設定


【バージョン】
環境 : さくらVPS
OS : CentOS Linux release 7.6.1810 (Core)
http : nginx version: nginx/1.14.2


【環境状態】
・「/var/www/html/」以下に各ドメインごとのディレクトリを作成
・各ドメインのルーティング設定は「/etc/nginx/conf.d/sites-enabled/example.com.conf」で管理
・SSL認証はLet's Encryptで設定
・パスワード設定ファイルは「/etc/nginx/.htpasswd」に記述
・「nginx -t」や「systemctl reload nginx」などのNginx起動のコマンドは通る(エラーは出ない)
・URLのページ自体も問題なくアクセスできる


【各ファイルソース】

# ① 「/etc/nginx/conf.d/sites-enabled/example.com.conf」 server { listen 80; listen 443 ssl; server_name www.example.com; root /var/www/html/example; access_log /var/log/nginx/example.com-access.log; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; return 301 $scheme://example.com$request_uri; location / { index index.html index.htm; try_files $uri $uri/ =404; # ここで認証設定 auth_basic "auth basic"; auth_basic_user_file /etc/nginx/.htpasswd; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
# ② 「/etc/nginx/conf.d/default.conf」 server { listen 80; server_name localhost; root /var/www/html; location / { root /var/www/html; index index.php index.html index.htm; } }
# ③ 「/etc/nginx/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; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; server_tokens off; include /etc/nginx/conf.d/*.conf; include /etc/nginx/conf.d/sites-enabled/*.conf; }

当方、Nginxの設定に抜け等の問題ではないかと思っているのですが、
確信を得られる原因がわからなかったのでご教示頂けると幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ざっとみた限りでは、設定後の再起動忘れなどがなければ、特に設定の問題はなさそうですが、アクセスログにはどのように出力されていますか?

たとえば、Webブラウザが認証情報を覚えていて自動的にログインしているということはありませんか?

curl でアクセスすると 401 のレスポンスが返ってきたりしませんか?

投稿2019/02/20 23:54

編集2019/02/20 23:55
CHERRY

総合スコア25171

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

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

sika

2019/02/21 02:57

ご回答ありがとうございます。 アクセスログは「tail -f a /var/log/nginx/example.com-access.log」でリアルタイムで接続確認できました。特に問題ないように見えるのですがどうでしょうか? 203.165.245.1 - - [21/Feb/2019:11:11:44 +0900] "GET /favicon.ico HTTP/1.1" 404 162 "http://example.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.3 Safari/605.1.15" 203.165.245.1 - - [21/Feb/2019:11:12:52 +0900] "GET / HTTP/1.1" 200 308 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.3 Safari/605.1.15" 203.165.245.1 - work [21/Feb/2019:11:12:58 +0900] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36" 「curl http://example.com」コマンドでもHTMLのソースが返ってきます。 オプションコマンドなども必要でしょうか? ブラウザの認証情報なども残しておりません。というよりもBasic認証時のアクセスでアドレスバーに出るはずの鍵マークも出ていないのでやはり内部設定自体がちゃんと通ってはいないかもしれません。
CHERRY

2019/02/21 04:03

いま、気がつきましたが、 > return 301 $scheme://example.com$request_uri; の設定が入っていると ループしませんかね? 多分やりたいことは http を https にリダイレクトだと思うのですが、http も https も 1つの Server 設定にまとめているので、問題が出る様な気がします。 一度、この1行を消して実行してもらえないでしょうか?
CHERRY

2019/02/21 04:06

return 301 $scheme://example.com$request_uri; を入れて、試してみましたが、 curl -D - -s -o /dev/null http://example.com/ を実行すると HTTP/1.1 301 Moved Permanently Server: nginx/1.15.8 Date: Thu, 21 Feb 2019 04:05:33 GMT Content-Type: text/html Content-Length: 169 Connection: keep-alive Location: http://example.com/ になりましたので、おそらく延々と301で、リダイレクトループして、認証までたどり着かないと思います。
sika

2019/02/21 20:25

> おそらく延々と301で、リダイレクトループして、認証までたどり着かないと思います。 まさにでした! 簡略化のつもりでしたが、完全に悪手でした。 下記のように80と443のServer設定を個別に指定したところ、ちゃんと認証が機能しました。 ``` server { listen 80; server_name www.example.com example.com; root /var/www/html/example; access_log /var/log/nginx/example.com-access.log; auth_basic "auth basic"; auth_basic_user_file /etc/nginx/.htpasswd; location / { index index.html index.htm; try_files $uri $uri/ =404; } location = /50x.html { root /usr/share/nginx/html; } } server { listen 443 ssl; server_name www.example.com example.com; root /var/www/html/example; access_log /var/log/nginx/example.com-access.log; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; auth_basic "auth basic"; auth_basic_user_file /etc/nginx/.htpasswd; location / { index index.html index.htm; try_files $uri $uri/ =404; } location = /50x.html { root /usr/share/nginx/html; } } ``` 本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問