Como configuro o arquivo conf Nginx para forçar o SSL em apenas um dos caminhos do meu site e não SSL no restante?
Por exemplo, eu quero que todos os URLs em / user sejam https, mas todo o restante dos URLs seja http.
Para a primeira parte eu tenho:
rewrite ^/user(.*) https://$http_host$request_uri?;
Eu não quero usar "se". Suponho que tiraria vantagem da ordem de operação, mas não quero terminar em um loop.
/user
e non-ssl para todos os outros URLs. Como resultado, mesmo o usuário digita explicitamentehttps://www.example.com/
na barra de endereços do navegador, a página resultante éhttp://www.example.com/
. Existe uma maneira de implementar a reescrita automática de URL entre ssl / não-ssl, conforme alcançado pelas configurações descritas nesta resposta, mas ainda respeitar a solicitação explícita de ssl, se digitada explicitamente pelo usuário na barra de endereço? Obrigado!O Nginx permite processar HTTP e HTTPS dentro do mesmo
server
bloco. Portanto, você não precisa duplicar diretivas para ambas e pode redirecionar o caminho que deseja protegerCertifique-se de não colocar a
ssl on
linha lá, pois isso quebrará o HTTP simples.Opcionalmente, você pode redirecionar todas as outras solicitações de HTTPS de volta para HTTP da mesma maneira:
ATUALIZAÇÃO : como Alexey Ten gentilmente aponta na seção de comentários, verificar
scheme
cada solicitação não é uma idéia muito brilhante. Você deve seguir a maneira declarativa de configurar seu nginx. Nesse caso, declare dois blocos de servidor com redirecionamentos porlocation
, mova a lógica comum para um arquivo separado einclude
em ambos. Então a resposta da GruffTech é melhor.fonte
include
diretiva para diretivas comuns. Alguma duplicação está correta.