Eu tenho a seguinte configuração dentro de um server {...}
bloco nginx:
location /someapp {
if ( $https != "on" ) {
return 301 https://$server_name$request_uri;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php-fpm.sock;
}
}
O problema é:
- quando acesso
http://example.com/someapp/somefile.html
(ou apenas/someapp
), sou redirecionado para HTTPS, - mas quando acesso
http://example.com/someapp/somefile.php
, não sou redirecionado para HTTPS.
A propósito, isso é consistente com o doc , que diz:
Para encontrar um local que corresponda a uma determinada solicitação, o nginx primeiro verifica os locais definidos usando as strings de prefixo (locais de prefixo). Entre eles, o local com o prefixo correspondente mais longo é selecionado e lembrado. Em seguida, as expressões regulares são verificadas, na ordem em que aparecem no arquivo de configuração. A pesquisa de expressões regulares termina na primeira correspondência e a configuração correspondente é usada. Se nenhuma correspondência com uma expressão regular for encontrada, a configuração do local do prefixo lembrado anteriormente será usada.
Então, quando location ~ \.php$
é uma correspondência, location /someapp
é ignorado, mesmo que a solicitação seja para .../someapp/somefile.php
.
Ter o location ~ \.php$ {...}
bloco fora do bloco pai location /someapp {...}
não altera esse comportamento.
Como posso redirecionar todas as solicitações HTTP para HTTPS /someapp
sem ter que duplicar as linhas if
e return
no bloco de localização do php?
Minha sugestão seria
isso criaria um servidor básico para a porta 80 e diria ao navegador para usar permanentemente 443