nginxのproxy_set_headerの設定場所
若干はまったのでメモ。
何が起きたか
設定をちょこちょこ修正してたらproxy後にheaderがうまく付与されなくなりました。
その時の設定
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; location / { proxy_pass http://backend; proxy_redirect http://backend.hogehoge.com/ /; }
上記設定だとバックエンド側でX-Real-IPが取得できなくなります。
なんで?
proxy_set_headerはproxy_pass後に書かなきゃダメみたいですね。
公式におもいっきり書いてありました。
http://wiki.nginx.org/HttpProxyModule#proxy_pass
By default, the Host header from the request is not forwarded, but is set based on the proxy_pass statement. To forward the requested Host header, it is necessary to use:
正解は
ということで以下が正解。
location / { proxy_pass http://backend; proxy_redirect http://backend.hogehoge.com/ /; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }