curlコマンドでNginxのX-Forwarded-ProtoでのHTTPSリダイレクトのテストをする
NginxでX-Forwarded-Protoの値を見てhttpsだったらhttpにリダイレクトする設定をしてcurlコマンドでテストしてみました。
SSLの処理は前段のロードバランサで行っていて、Nginxではhttpサーバとして動いている場合の例です。
Nginxのlocationディレクティブ設定
ヘッダでX-Forwarded-Proto: https
が設定されていたらhttpにリダイレクトします。
location ^~ /content/ {
if ($http_x_forwarded_proto = "https") {
return 301 http://$host$request_uri;
}
}
curlコマンドでテスト
ヘッダにX-Forwarded-Proto: https
を指定してHEADリクエストを送って301リダイレクトされることを確認します。
$ curl --header 'X-Forwarded-Proto: https' --head https://localhost/content/
HTTP/1.1 301 Moved Permanently
Server: nginx/1.7.9
Date: Tue, 19 Jan 2015 03:38:19 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: http://localhost/content/
httpの場合は200 OKになることも確認します。
$ curl --header 'X-Forwarded-Proto: http' --head http://localhost:9000/content/
HTTP/1.1 200 OK
Server: nginx/1.7.9
Date: Tue, 19 Jan 2015 03:43:31 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
ifディレクティブには注意
nginxのifに要注意に書いてある通り、Nginxでifディレクティブを使う場合は気をつける必要があります。
ただし、Nginx Communityの記事にもreturn ...;
かrewrite ... last;
を使う場合はOKと書いてあったので今回はifディレクティブで設定しました。