こんにちは池島です。またもやご無沙汰です。
最近はAWSの環境設定ばかり見ています。今回はnginxでサイトを作成しました。AWS、ELB、nginxという組み合わせだったので、設定ファイル変更で少し悩んだので備忘録的に書いておきます。編集した設定ファイルは「/etc/nginx/conf.d」配下の拡張子が*.confのファイルです。
今回やりたかったことは下記のことです。
1.ベーシック認証を利用したい
2.特定のIPアドレスからアクセスした場合はベーシック認証を解除したい
3.AWSのELBのヘルスチェックをHTTPで行いたい
4.ヘルスチェック以外のアクセスの場合、HTTPSを強制したい
これを実現するために設定に下記の内容を書いてみました。
#HTTPSの強制をチェックします
set $https_c 0;
#HTTPS以外でアクセスした場合はHTTPSを強制します
if ($http_x_forwarded_proto != https) {
set $https_c 1;
}
#ELBのヘルスチェックはHTTPSを強制しません
if ($http_user_agent = "ELB-HealthChecker/1.0") {
set $https_c 0;
}
#HTTPS強制が必要な場合、httpsでリダイレクトします
if ( $https_c = 1 ) {
return 301 https://xxx.xxxx.com$request_uri;
}
#IPアドレスをチェックします
set $auth "Restricted";
#特定のIPアドレスからのアクセスした場合BASIC認証なしにします
if ($http_x_forwarded_for ~* ^xxx\.xxx\.xxx\.xxx$) {
set $auth off;
}
#ELBのヘルスチェックの場合もBASIC認証なしにします
if ($http_user_agent = "ELB-HealthChecker/1.0") {
set $auth off;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
#必要な場合のみBASIC認証します
auth_basic $auth;
auth_basic_user_file /etc/nginx/.htpasswd;
}
以上です。





