Eu gostaria de ter return 301 https://$host$request_uri;
para ser executado apenas em alguns casos. Eu sei que o nginx não suporta & & ou || nas condições e isso é um problema para mim.
Eu hospedo um aplicativo rails e a maneira mais fácil de adicionar suporte a SSL e forçar meus usuários a sempre usar https foi mudando minha configuração para
server {
listen <my ip>:80;
server_name mydomain.tld;
return 301 https://$host$request_uri;
}
...
upstream my_backend {
server 127.0.0.1:9005;
}
server {
listen <my ip>:443;
server_name mydomain.tld;
ssl on;
....
location / {
proxy_pass http://my_backend;
}
}
Isso funciona bem, mas um de nossos grandes clientes usa o Lotus Notes e quando lêem nossos boletins informativos que referenciam recursos como <img src="https://mydomain.tld/some-image.png"/>
,elesnãopodemvernadaporqueoIErenderizaemsegundoplano,suaversãoantigadoIEnãotemSNIapoio,oIEserecusaaprocessaraimagem,tudopareceumabagunça.
Então,decidinãousaremnossasreferênciasdeboletinsinformativosparahttps
,masparahttp
.Entãoeucrieiessaconfiguração:
server{listen<myip>:80;server_namemydomain.tld;location/{proxy_passhttp://my_backend;}set$redir_to_ssl'';if($request_uri!~^/typo3/){set$redir_to_ssl"${redir_to_ssl}1";
}
if ( $request_uri !~ ^/mailimage/ ) {
set $redir_to_ssl "${redir_to_ssl}1";
}
if ( $request_uri !~ ^/ical$ ) {
set $redir_to_ssl "${redir_to_ssl}1";
}
if ( $redir_to_ssl = "111" ){
return 301 https://$host$request_uri;
}
}
Eu ainda quero que o nginx redirecione automaticamente qualquer pessoa para o site https
, a menos que o URI comece com / typo3 ou com / mailimage ou com / ical.
Então, eu precisava de algo assim
if ( URI does not start with /typo3 AND URI does not start with /mailimage AND ... )
return 301 https://$host$request_uri;
Eu não estou feliz com isso, não parece tão bem gerenciado, então continuei procurando por melhores soluções. Eu encontrei este um condições múltiplas Nginx em se declaração muito intersting, de alguma forma parece muito mais limpo. Devo usá-lo? E como?
Então?
server {
....
location /typo3 {
proxy_pass http://my_backend;
}
location /mailimage {
proxy_pass http://my_backend;
}
location /ical {
proxy_pass http://my_backend;
}
return 301 https://$host$request_uri;
}
Algo assim funcionaria? E seria melhor que minha solução inicial?