nginxをリバースプロキシとして使っていて、カスタムHTTPヘッダを見てproxy_passを振り分けたいことがあります。
どういうユースケースかというと、例えば現新システムを並行稼動させるのに前段でnginxをリバースプロキシとして使って、通常のリクエストは両方に分散しているのだけど、新システムだけで起こるバグの切り分けのために、一部の関係者だけ明示的に新システム側にルーティングしたいみたいなケース。
セッションの中のユーザID見てとか作りこむの大変なので、もっとお手軽に。
基本的なアイデアとしては、ブラウザの拡張でカスタムHTTPヘッダを付けてアクセスして、nginxでそのヘッダを見て振り分けする。
Modify HeadersというChrome拡張でブラウザから好きなカスタムHTTPヘッダを追加で付与できるので、これで適当なヘッダをセットする。
Modify Headers for Google Chrome
例えば X-BACKEND-VERSION: 2
という独自のHTTPヘッダを使う場合、こんなかんじで振り分けができる。
http {
...
server {
listen 8080;
server_name example.com;
...
location / {
if ($http_x_backend_version = "2") {
proxy_pass http://backend2;
break;
}
proxy_pass http://backend1;
}
...
}
}
Unknown 〜 エラーが出た場合は、 underscores_in_headers on;
もhttpまたはserverコンテキストに指定が必要かもしれません。
これでURLベースじゃなくて好きなルーティングができるようになるので、メンテ画面出しつつ関係者だけ使えるようにするとか応用するアイデアがいろいろありそうな覚えておくと便利な小技じゃなかろうかと。