Estou usando o HAProxy para balanceamento de carga e só quero que meu site ofereça suporte a https. Portanto, gostaria de redirecionar todas as solicitações na porta 80 para a porta 443.
Como eu faria isso?
Edit: Gostaríamos de redirecionar para o mesmo url em https, preservando os parâmetros de consulta. Assim, http://foo.com/bar redirecionaria para 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 }
. A documentação para redirecionamento de http no ALOHA HAProxy 7.0 chega a mencionar que " a sintaxe de ambas as diretivas é a mesma, isto é, o redirecionamento agora é considerado legado e as configurações devem passar para o formulário de redirecionamento de solicitação http ". Eu deduzo, sem ter certeza absoluta, que a mesma explicação se aplica aos lançamentos mais recentes da versão de código aberto do HAProxy.Não tenho reputação suficiente para comentar uma resposta anterior, então estou postando uma nova resposta para complementar a resposta de Jay Taylor. Basicamente, sua resposta fará o redirecionamento, porém um redirecionamento implícito, o que significa que emitirá um 302 (redirecionamento temporário), mas como a pergunta informa que todo o site será servido como https, então o redirecionamento apropriado deve ser 301 (redirecionamento permanente )
Parece uma pequena mudança, mas o impacto pode ser enorme dependendo do site, com um redirecionamento permanente estamos informando ao navegador que ele não deve mais procurar a versão http desde o início (evitando redirecionamentos futuros) - uma economia de tempo para https sites. Também ajuda com SEO, mas não divide o suco de seus links.
fonte
Para redirecionar todo o tráfego:
redirect scheme https if !{ ssl_fc }
Para redirecionar um único url (no caso de vários frontend / backend)
redirect scheme https if { hdr(Host) -i www.mydomain.com } !{ ssl_fc }
fonte
De acordo com http://parsnips.net/haproxy-http-to-https-redirect/ , deve ser tão fácil quanto configurar seu haproxy.cfg para conter o seguinte.
fonte
A melhor maneira garantida de redirecionar tudo de http para https é:
Isso é um pouco mais elaborado usando o 'código 301 ′, mas pode muito bem deixar o cliente saber que é permanente. A parte 'modo http' não é essencial com a configuração padrão, mas não faz mal. Se você tiver
mode tcp
na seção de padrões (como eu fiz), então é necessário.fonte
Uma ligeira variação da solução do user2966600 ...
Para redirecionar todos, exceto um único URL (no caso de vários front-end / back-end):
fonte
Como disse Jay Taylor, o HAProxy 1.5-dev tem a
redirect scheme
diretiva de configuração, que realiza exatamente o que você precisa.No entanto, se você não puder usar o 1.5, e se estiver pronto para compilar o HAProxy a partir do código-fonte, fiz backport da
redirect scheme
funcionalidade para que funcione no 1.4. Você pode obter o patch aqui: http://marc.info/?l=haproxy&m=138456233430692&w=2fonte
fonte
Em versões mais recentes do HAProxy, é recomendado o uso
para redirecionar o tráfego http para https.
fonte
Se você deseja reescrever o url, você deve alterar o host virtual do seu site adicionando estas linhas:
Mas, se você deseja redirecionar todas as suas solicitações na porta 80 para a porta 443 dos servidores da web atrás do proxy, você pode tentar este exemplo de configuração em seu haproxy.cfg:
Espero que isso lhe ajude
fonte
Por que você não usa ACLs para distinguir o tráfego? no topo da minha cabeça:
Isso vai além do que Matthew Brown respondeu.
Veja os documentos ha , pesquise coisas como hdr_dom e abaixo para encontrar mais opções de ACL. Existem muitas opções.
fonte
Adicione isso à configuração do frontend do HAProxy:
fonte
Pode ser feito assim -
Qualquer tráfego que alcance http será redirecionado para https
fonte
declaração de redirecionamento é legada
use redirecionamento de solicitação http em vez disso
fonte
Simplesmente:
fonte