HAProxy - перенаправить схему на HTTPS, сохранив тот же метод HTTP (POST)

Я использую HAProxy 1.6

Я заставляю использование https. Поэтому в моем бэкэнде я перенаправляю http на https. Для этого я использую следующий код:

backend my-app-name
    redirect scheme https if !{ ssl_fc }
    [...]

Это работает хорошо, но если мой http-запрос выполняется с использованием метода POST, кажется, что схема перенаправления изменит метод на GET.

Я видел, что в документации HAProxy, касающейся перенаправления HTTP, мы можем изменить код HTTP на 308. Но я не могу изменить поведение моего текущего приложения.

Как я могу перенаправить на https, используя HAProxy и сохраняя свой оригинальный метод HTTP?

2 ответа

Как вы почти сказали, вы можете сделать следующее:

backend my-app-name
       redirect scheme https code 308 if !{ ssl_fc }

haproxy вернет 308 (вместо 302). Я не уверен, как ваше приложение участвует. Если он находится за haproxy, он никогда не заметит первые не-https запросы. И, например, любой браузер выполнит второй запрос через https и тот же HTTP-глагол, то есть сохранит POST.

Перенаправления

Используйте директиву конфигурации перенаправления http-request для перенаправления HTTP-трафика. Они отправляют клиенту ответ на перенаправление HTTP, а затем клиент отправляет новый запрос к новому ресурсу. При выполнении перенаправления HAProxy Enterprise отвечает непосредственно клиенту; он не пересылает трафик на сервер.

Вы можете указать возвращаемый код состояния HTTP, задав параметр code. Используйте любое из следующих действий:

Код Значение


301    Постоянный переезд

302    Временное перемещение не должно кэшироваться клиентом. Это значение по умолчанию, если код не настроен.

303    Аналогично 302, но браузер должен получить новое местоположение с помощью GET.

307    Аналогично 302, но браузер должен повторно использовать тот же метод, что и в исходном запросе.

308    Аналогично 301, но браузер должен повторно использовать тот же метод, что и в исходном запросе.

Другие вопросы по тегам