概要
リバースプロキシーにnginxを使っている事例で、HTTPSのリクエストが強制的にHTTPリクエストされてしまう現象がありました。
リバースプロキシーの設定か、アップストリームサーバーの応答がおかしいのか、調査するためのログの取り方をまとめます。
手順
- 下記**「設定ファイルの修正方法」**の通り設定ファイルを修正
- nginxを再起動
設定ファイルの修正方法
nginx.conf
http {
:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
+ log_format upstreamlog '[$time_local] $remote_addr $host $upstream_addr '
+ '$upstream_cache_status $upstream_status `
+ `$upstream_http_location $request';
:
}
conf.d/xxxx.conf
server {
:
access_log /var/log/nginx/xxxx_access.log main;
+ access_log /var/log/nginx/xxxx_upstream.log upstreamlog;
:
}
ログフォーマットの解説
変数名 | 意味 |
---|---|
$time_local |
ログが記録されたローカル時刻 |
$remote_addr |
クライアント端末のアドレス |
$host |
次の順番で決まり記録される:リクエスト行のホスト名、リクエストのヘッダー行の"Host"からのホスト名、リクエストにマッチしたサーバー名。 |
$upstream_addr |
アップストリームサーバーのIPアドレスとポートもしくはUNIXドメインソケットが記録されます。リクエストの処理の間に複数のサーバーが応答した場合はカンマ区切りで記録されます。 例: 192.168.1.1:80, 192.168.1.2:80, unix:/tmp/sock 。もし、 X-Accel-Redirect か error_pageにより、あるサーバーグループから別のサーバーグループへ内部リダイレクトががあった場合は、異なるサーバーグループのサーバーアドレスはコロンで区切られます。例: 192.168.1.1:80, 192.168.1.2:80, unix:/tmp/sock : 192.168.10.1:80, 192.168.10.2:80 。サーバーが選択できなかった場合は、サーバーグループの名前が記録されます。 |
$upstream_cache_status |
レスポンスのキャッシュのステータスが記録されます。ステータスは次のどれかです:MISS ,BYPASS ,EXPIRED ,STALE ,UPDATING ,REVALIDATED もしくはHIT
|
$upstream_status |
アップストリームサーバーからの応答のステータスコードを記録します。変数$upstream_addr のように、複数のサーバーからの複数の応答のステータスコードはカンマとコロンで分けて記録されます。サーバーが選択されなかった場合は、変数は **502(Bad Gateway)**ステータスコードには保存されます。 |
$upstream_http_location |
アップストリームサーバーからの応答のヘッダを記録します。応答のヘッダServer は、$upstream_http_server変数で記録できます。ヘッダフィールド名から環境変数の変換ルールは、$http_ プレフィックスからのものと同じです。最後のサーバーからの応答のヘッダーの項目のみが記録されます。 |
$request |
もとのリクエスト行の全体が記録されます |