Estou usando um balanceador de carga da Rackspace que permite configurar minha chave / pem ssl dentro do painel de administração. Tudo funciona bem, eu posso usar os protocolos http e https. Mas se eu tentar redirecionar http para https usando:
server{
listen *:80;
server_name mydomain.com www.mydomain.com;
rewrite ^ https://mydomain.com$request_uri? permanent;
... Eu recebo um loop de redirecionamento. Sei que não estou ouvindo a porta 443, mas é porque o balanceador de carga tratou disso para mim. Eu também tentei envolver a reescrita if ($scheme ~* http){
sem sucesso.
A outra parte da minha pergunta é que eu gostaria de remover o www do URL. Posso fazer isso com uma única reescrita? As reescritas acima não deveriam cuidar disso também?
Obrigado pela ajuda!
nginx
load-balancing
jwerre
fonte
fonte
Respostas:
O sciurus está correto, pois os Cloud Load Balancers da Rackspace configuram o X-Forwarded-Proto como https quando o SSL é descarregado no balanceador de carga. Para evitar um loop de redirecionamento no nginx, você deve poder adicionar o seguinte à
location
seção na configuração do vhost:Isso deve evitar o loop infinito de redirecionamento ao redirecionar solicitações não https para https.
fonte
Ao usar nginx está embutido variáveis de servidor
$request_uri
e$server_name
você pode fazer isso sem o uso de expressões regulares em tudo. Adicione o seguinte aolocation
bloco do seu servidor e pronto:Isso pressupõe que seu balanceador de carga esteja enviando o
$http_x_forwarded_proto
cabeçalho junto com a solicitação para suas instâncias de back-end. Outros cabeçalhos comuns incluem$http_x_forwarded_scheme
e também apenas$scheme
.Mais informações podem ser encontradas na documentação nginx Pitfalls and Common Mistakes : https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/#taxing-rewrites
fonte
$host
vez de$server_name
O balanceador de carga sempre fala com você por http. O que está acontecendo é
As etapas 2 a 4 continuam repetindo até que o navegador detecte o loop de redirecionamento e desista.
EDIT: Para resolver isso, execute a reescrita somente quando o cabeçalho X-Forwarded-Proto estiver definido como http. Esse cabeçalho é como o balanceador de carga da Rackspace informa ao servidor da Web o protocolo pelo qual ele recebeu a solicitação.
fonte