rails не должен перенаправлять заголовок X-forwarded-host - PullRequest
0 голосов
/ 01 мая 2019

В рельсах (используется 5.2.3), код redirect_to events_path отправит ответ 302 с новым URL. Этот URL содержит имя хоста, и это имя хоста берется из заголовка X-forwarded-host запроса.

Это, кажется, не правильно и в этом случае не работает. Как и где это конкретное поведение можно изменить (или настроить) в Rails?

подробности:

Приложение rails с сервером puma работает в интрасети на http://server1.private.internal:5959/. Разговаривает с апачем (2.4). Апач работает на www.example.org и общается с внешним миром. Apache использует обратный прокси-сервер, поэтому приложение становится доступным как https://www.example.org/myapp.

Это работает, за исключением redirect_to, который не работает. Я проанализировал это и произошло следующее:

  1. Apache получает запрос от клиента.
  2. Apache передает запрос в Rails, добавляя HTTP-заголовки X-Forwarded-Host и X-Forwarded-Server, содержащие www.example.org имя хоста.
  3. Rails отвечает с 302 и Location: http://www.example.org/events/, тогда как на самом деле это должно быть Location: http://server1.private.internal:5959/events/
  4. Apache передает этот заголовок Location клиенту без изменений, поскольку он не содержит внутреннего имени хоста и, следовательно, не перезаписывается при обратном проксировании.
  5. Клиент не может использовать этот URL, потому что ему не хватает SSL и отсутствует правильный myapp путь.

Обход:

Apache поддерживает опцию конфигурации ProxyAddHeaders Off. Когда это используется, он не будет добавлять эти заголовки на шаге 2. И тогда Rails отвечает с правильным внутренним URL в заголовке Location, и все работает.

Но я не хочу настраивать это в Apache, я хочу настроить или правильно кодировать его в приложении Rails. Кто-нибудь знает, где и как этого можно достичь?

...