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, но браузер должен повторно использовать тот же метод, что и в исходном запросе.