Nginxで auth_request とか使って認証通したあと、バックエンドに X-User-Email みたいなヘッダーを付与して渡す構成、よくやりますよね。
でも、「設定は書いたけど、本当にバックエンドにヘッダー届いてる?」 って不安になることがあります。
わざわざバックエンドのアプリ側でログ出力を仕込むのも面倒なので、リクエスト内容をそのままJSONで返してくれるEchoサーバーに一時的に向き先を変えて確認する方法のメモです。
1. Echoサーバーを立てる
mendhak/http-https-echo というDockerイメージが便利です。
リクエストヘッダーやボディをJSONで見やすく返してくれます。
既存のアプリ(8080)と被る場合は、とりあえずホスト側の 8088ポート で起動しておきます。
# 8088ポートで待ち受けるEchoサーバーを起動
docker run --rm -p 8088:8080 --name echo-header mendhak/http-https-echo
2. Nginxの向き先を一時変更する
Nginxのconfで、確認したい location の proxy_pass を、先ほど立てたEchoサーバー(8088)に向けます。
今回は auth_request で取得したEmailヘッダーがセットされているか確認したい想定です。
location / {
# ... (中略) ...
# ここでセットしたヘッダーがちゃんと渡るか見たい
proxy_set_header Email $email;
# 元の設定: proxy_pass http://127.0.0.1:8080;
# 一時変更: Echoサーバー(8088)へ飛ばす
proxy_pass http://127.0.0.1:8088;
}
書き換えたらNginxをリロードします。
nginx -s reload
3. 確認
ブラウザかcurlで該当のパスにアクセスします。
すると、Echoサーバーから以下のようなレスポンスが返ってきます。
※docker run を実行しているターミナル側にもログが流れるためそちらでも確認可能。
{
"path": "/",
"headers": {
"host": "localhost",
"email": "user@example.com", <-- これが入ってればOK!
"x-forwarded-for": "172.17.0.1",
"accept": "*/*",
"user-agent": "curl/7.64.1"
},
"method": "GET",
"body": "",
"query": {}
}
headers の中に、意図した email が入っていれば設定成功です。
確認が終わったら、proxy_pass を元のポート(8080)に戻して完了です。
デバッグ時にサクッと確認できるので便利。