Я использую HAProxy для балансировки нагрузки и хочу, чтобы мой сайт поддерживал только https. Таким образом, я хотел бы перенаправить все запросы с порта 80 на порт 443.
Как мне это сделать?
Изменить: мы хотели бы перенаправить на тот же URL-адрес на https, сохранив параметры запроса. Таким образом, http://foo.com/bar будет перенаправлять на https://foo.com/bar
redirect scheme https code 301 if { hdr(Host) -i www.mydomain.com } !{ ssl_fc }
http-request redirect scheme https code 301 if !{ ssl_fc }
. В документации по перенаправлению http в ALOHA HAProxy 7.0 даже упоминается, что « синтаксис обеих директив одинаковый, при этом перенаправление теперь считается устаревшим, и конфигурации должны перемещаться в форму перенаправления HTTP-запросов ». Не будучи полностью уверенным, я делаю вывод, что то же самое объяснение применимо к более новым выпускам версии HAProxy с открытым исходным кодом.У меня недостаточно репутации, чтобы прокомментировать предыдущий ответ, поэтому я публикую новый ответ, чтобы дополнить ответ Джея Тейлора. В основном его ответ будет выполнять перенаправление, хотя и неявное перенаправление, что означает, что он выдаст 302 (временное перенаправление), но поскольку вопрос сообщает, что весь веб-сайт будет обслуживаться как https, тогда соответствующее перенаправление должно быть 301 (постоянное перенаправление ).
Это кажется незначительным изменением, но влияние может быть огромным в зависимости от веб-сайта, с постоянным перенаправлением мы информируем браузер, что он больше не должен искать версию http с самого начала (избегая будущих перенаправлений) - экономия времени для https места. Это также помогает с SEO, но не разделяет ваши ссылки.
источник
Чтобы перенаправить весь трафик:
redirect scheme https if !{ ssl_fc }
Для перенаправления одного URL-адреса (в случае нескольких интерфейсов / бэкэндов)
redirect scheme https if { hdr(Host) -i www.mydomain.com } !{ ssl_fc }
источник
Согласно http://parsnips.net/haproxy-http-to-https-redirect/ это должно быть так же просто, как настроить haproxy.cfg, чтобы он содержал следующее.
источник
Лучший гарантированный способ перенаправить все с http на https:
Это немного удобнее использовать «код 301», но с тем же успехом можно сообщить клиенту, что это навсегда. Часть 'mode http' не важна для конфигурации по умолчанию, но не повредит. Если у вас есть
mode tcp
раздел по умолчанию (как у меня), то это необходимо.источник
Небольшое изменение решения user2966600 ...
Чтобы перенаправить все, кроме одного URL (в случае нескольких интерфейсов / бэкэндов):
источник
Как сказал Джей Тейлор, HAProxy 1.5-dev имеет
redirect scheme
директиву конфигурации, которая выполняет именно то, что вам нужно.Однако, если вы не можете использовать 1.5, и если вы готовы скомпилировать HAProxy из исходного кода, я перенес эту
redirect scheme
функциональность, чтобы она работала в 1.4. Вы можете получить патч здесь: http://marc.info/?l=haproxy&m=138456233430692&w=2источник
источник
В более новых версиях HAProxy рекомендуется использовать
для перенаправления http-трафика на https.
источник
Если вы хотите переписать URL-адрес, вам нужно изменить виртуальный хост своего сайта, добавив следующие строки:
Но если вы хотите перенаправить все свои запросы с порта 80 на порт 443 веб-серверов за прокси-сервером, вы можете попробовать этот пример conf на своем haproxy.cfg:
Я надеюсь это поможет тебе
источник
Почему вы не используете ACL для различения трафика? над моей головой:
Это дополняет то, что ответил Мэтью Браун.
См. Документацию ha , поищите такие вещи, как hdr_dom и ниже, чтобы найти дополнительные параметры ACL. Есть много вариантов.
источник
Добавьте это в конфигурацию внешнего интерфейса HAProxy:
источник
Можно сделать так -
Любой трафик, попадающий в http, будет перенаправлен на https
источник
инструкция перенаправления является устаревшей
вместо этого используйте перенаправление http-запроса
источник
Просто:
источник