雑記

インフラのことだったりプログラムのことだったりどうでもいいこと書いたり。要は雑記。

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;
}