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 proteger
server {
listen 80 default_server;
listen 443 ssl;
... ssl certificate and other configs ...
location /user {
if ($scheme = 'http') {
rewrite ^ https://$http_host$request_uri? permanent;
}
}
... your basic configuration ...
}
Certifique-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:
if ($scheme = 'https') {
rewrite ^ http://$http_host$request_uri? permanent;
}
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 por location
, mova a lógica comum para um arquivo separado e include
em ambos. Então a resposta da GruffTech é melhor.