Pelo que eu aprendi até agora, está claro que executar declarações if no nginx deve ser evitado a todo custo. A maioria dos exemplos que encontrei até agora sobre redirecionamentos de páginas específicos envolve vários servidores sendo usados. Mas isso não é um pouco exagerado? Não tenho certeza, mas acho que vários servidores para fazer isso seria um pouco mais lento do que um único servidor quando estiver sob carga pesada.
Minha chamada atual do servidor é esta:
server {
listen 10.0.0.60:80;
listen 10.0.0.60:443 default ssl;
#other code
}
O que eu quero fazer é redirecionar algumas solicitações http para solicitações https. Por exemplo, eu quero / login / e / my-account / sempre ser forçado a usar SSL. Se você está em / help / though, eu quero que seja servido pelo http padrão.
Existe uma maneira de realizar isso em uma única chamada de servidor? Ou não há desvantagem em usar duas chamadas de servidor para que isso funcione? O nginx parece estar sob desenvolvimento bastante ativo e muitos dos guias mais antigos que eu segui foram de momentos em que você não podia escutar pedidos para as portas 80 e 443 dentro da mesma chamada de servidor. Mas agora que o nginx foi atualizado para suportar isso (estou executando o 1.2.4), estou me perguntando se existe uma maneira de "melhor prática" de lidar com isso hoje.
Qualquer ajuda seria muito apreciada.
EDITAR:
Eu encontrei este guia:
link
e atualizei meu código da seguinte forma:
map $uri $my_preferred_proto {
default "http";
~^/#/user/login "https";
}
server {
listen 10.0.0.60:80; ## listen for ipv4; this line is default and implied
listen 10.0.0.60:443 default ssl;
if ($my_preferred_proto = "none") {
set $my_preferred_proto $scheme;
}
if ($my_preferred_proto != $scheme) {
return 301 $my_preferred_proto://mysite.com$request_uri;
}
Não está funcionando. Quando eu altero o padrão para https, tudo é redirecionado para SSL, então funciona um pouco. Mas o redirecionamento de / # / user / login não está redirecionando para HTTPS. Alguma ideia? Além disso, esta é uma boa maneira de fazer isso?