NginxでBasic認証かけて404エラーが出る
ぜひフォローしてください
Follow @SoYaNoNikkeyBasic認証
簡易であり、ほぼ全てのwebサーバー、ブラウザで使うことができる。 アカウント名とパスワードを繋いでBase64でエンコードして送る。このためパスワードを通信中に抜き取られてしまう可能性がある。
Basic認証を実装
DjangoにもBasic認証の機能があるようだが、Nginxで特定のディレクトリに認証機能を実装することにした。
環境
- AWS EC2サーバー
- Python(3.6.8)
- pyenv(1.2.9)
- Django(2.1.5)
- gunicorn(19.9.0)
- nginx(1.14.1)
ここまでの環境構築は前の記事を参考にしてください。
# htpasswdコマンドでBasic認証するためのツール $ yum install httpd-tools # アカウント、パスワードを登録 $sudo htpasswd -c /etc/nginx/.htpasswd [account name] New password: Re-type new password: Adding password for user [account name]
次にnginx.confをいじります。
今回はhttp://[IPaddress]/hoge
の領域に認証機能を与えようと思います。
nginx.conf server { #listen 80 default_server; #listen [::]:80 default_server; #server_name localhost; #root /usr/share/nginx/html; listen 80; server_name [IPaddress]; client_max_body_size 4G; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://app_server; location /hoge/ { proxy_pass http://app_server; ⇦これを忘れて小一時間苦しんだ。 auth_basic "secret derectry"; auth_basic_user_file "/etc/nginx/.htpasswd"; } }
いじったのはlocation /hoge/
の括弧内です。
今回嵌った点は2つありました。1つはBasic認証を実装したい領域(/hoge)について記述するlocation /hoge/
をlocation / {}
の括弧内に記述しないといけないということ。
2つ目はBasic認証をするために必要なauth_basic
と.htpasswdのパスを示すauth_basic_user_file
だけでなく、gunicornを使っているのでproxy_pass
も/hoge/内で記述しないといけないということ。
またおまえね。
参考にした記事ではWSGIを使ってなかったので、このことに小一時間気づかず。ずっと404Errorを吐き出していました。
認証機能のことについてもですが、WSGIについてもっと勉強しないとダメだなあ。