nginx の proxy まわりのメモ

nginx & unicorn で設定してるときに気になった箇所のメモ書き

proxy_redirect

レスポンスヘッダのうち

  • Location
  • Refresh

の書き換え。

Location ヘッダ

  • 201 のとき、新しく作られたリソース(URL)を返す
  • 3xx のとき、リダイレクト先のURLを返す

ためのヘッダ

設定例

もし下記のように nginx を設定していて

proxy_redirect http://localhost:8000/two/ http://frontend/one/;
Location: http://localhost:8000/two/some/uri/.

というレスポンスヘッダが返ってきたら、nginx はそれを

Location: http://frontend/one/some/uri/.

に書き換える。デフォルトは proxy_pass にならう。下記の二つの設定は同じになる。

location /one/ {
  proxy_pass       http://upstream:port/two/;
  proxy_redirect   default;
}
 
location /one/ {
  proxy_pass       http://upstream:port/two/;
  proxy_redirect   http://upstream:port/two/   /one/;
}

オフにするには下記のようにする。

proxy_redirect   off;

proxy_pass

プロキシ先のサーバのURI を指定する。

proxy_pass http://localhost:8000/uri/;
proxy_pass http://unix:/path/to/backend.socket:/uri/;

Host ヘッダがリクエストに含まれていなかったら、proxy_pass の値が使われる。ちゃんと送りたければ下記のようにする

proxy_set_header Host $host;

もし upstream なサーバが ssl 使ってるなら、明示的に https:// を指定して、かつポートも upstream の設定に書いておいた方が良い

upstream backend-secure {
  server 10.0.0.20:443;
}
 
server {
  listen 10.0.0.1:443;
  location / {
    proxy_pass https://backend-secure;
  }
}