LoginSignup
7
4

More than 5 years have passed since last update.

Reverse Proxy の背後にいる Rails アプリケーションからポート番号付きで正しくリダイレクトさせる

Posted at

Rails 以外でも、当てはまるケースはあるかもしれません。

問題

Nginx などの Web サーバを Reverse Proxy として、バックエンドで Rails アプリケーションを動かしているとします。
Reverse Proxy では http://example.com:8000 などポート番号付きでリクエストを受け付けています。

Nginx の設定は例えば次のような感じ:

http {
  server {
    listen       8000;
    server_name  example.com:8000;
    proxy_set_header X-Forwarded-Host  $host;

    location / {
      proxy_pass http://localhost:3000; # rails-app
    }
  }
}

Rails アプリケーションでリダイレクトが発生した場合には http://example.com:8000 にリダイレクトしてほしいのですが、この設定ではポート番号なしの http://example.com にリダイレクトされてしまい、以降のリクエストで Rails にプロキシされなくなってしまいます。

解決方法

上の設定ファイルで proxy_set_header X-Forwarded-Host の値を $host:$server_port とポート番号付きにすれば OK です。(X-Forwarded-Host でなくて Host でも可)

+    proxy_set_header X-Forwarded-Host  $host:$server_port;
-    proxy_set_header X-Forwarded-Host  $host;

これで http://example.com:8000 にリダイレクトされるようにできました。

参考

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4