Use $http_host
em vez de $server_name
.
rewrite ^ https://$http_host$request_uri? permanent;
Eu criei hosts virtuais para meus sites e então eu criei um outro host virtual com server_name -> default_server
para pegar todo o resto e mostrar uma página específica nesse caso (por exemplo, se alguém tentar acessar meu ip).
Também uso o phpmyadmin, roundcube e squirrelmail e queria redirecionar qualquer conexão para eles de http para https. E aqui está o problema:
Digamos que eu digite: http://44.44.44.44/phpmyadmin
(suponha que 44.44.44.44
seja meu ip)
Porque eu defini server_name -> default_server
server {
listen 80;
server_name default_server;
root /usr/share/nginx/www;
index index.html index.htm;
location /phpmyadmin {
rewrite ^ https://$server_name$request_uri? permanent;
}
[...]
}
O URL para o qual eu sou redirecionado não é https://44.44.44.44/phpmyadmin
, mas https://default_server/phpmyadmin
, o que obviamente não existe.
Então acabei apontando explicitamente para o meu ip:
location /phpmyadmin {
rewrite ^ https://44.44.44.44$request_uri? permanent;
}
Funciona assim, mas eu queria saber se existe uma maneira de fazer a mesma coisa usando uma variável que retorna o server_name analisado ou qualquer outra maneira / mais inteligente.
Tags nginx redirection