Primeira vez que configuro o Nginx e meu objetivo é ter example.com com uma página estática 'index.html' servida com uma configuração minimalista, nada mais. Também quero eliminar o subdomínio www. Aqui estão meus blocos de servidor disponíveis para sites:
server {
server_name www.example.com;
return 301 $scheme://example.com$request_uri;
}
server {
server_name example.com;
root /var/www/example.com/;
index index.html index.htm;
location / {
try_files $uri $uri/ /index.html;
}
}
Se eu usar www.example.com ou example.com, eles funcionarão bem, com www automaticamente descartado.
Meu problema é que posso digitar qualquer coisa depois de example.com e a página index.html ainda carrega, como example.com/ABC ou example.com/12345.Estas páginas não existem, por que os URLs são aceitos? Eu esperaria que qualquer URL diferente da raiz do domínio retornasse uma página 404.
Este é provavelmente um problema muito simples, mas tentei pesquisar aqui e nos documentos e não encontrei nada até agora.
Responder1
Parece o comportamento correto da cláusula try_files. Do wiki nginx:
Verifica a existência de arquivos em ordem e retorna o primeiro arquivo encontrado. Uma barra final indica um diretório - $uri /. Caso nenhum arquivo seja encontrado, um redirecionamento interno para o último parâmetro é invocado. Observe que apenas o último parâmetro causa um redirecionamento interno, os anteriores apenas definem o ponteiro URI interno.
Portanto, se você procurar ABC ou 12345, que não pode ser encontrado, um redirecionamento interno para index.html será invocado.
Experimente com:
location / {
try_files $uri $uri/ =404;
}
Veja aqui uma referência completa:
http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files
Baseado em Martin FjordvaldComenteaqui está a configuração mínima para os dois blocos de servidores, testados e funcionando:
server {
server_name www.example.com;
return 301 $scheme://example.com$request_uri;
}
server {
server_name example.com;
root /var/www/example.com/;
index index.html index.htm;
}
Responder2
2 coisas que eu poderia pensar:
ou você tem uma reescrita de volta para index.html
ou pode ser possível que você tenha uma página 404 personalizada vinculada ao index.html
pelo menos essas seriam as 2 ideias que eu verificaria primeiro.
outra solução possível seria verificar os logs, definir valores para depurar e verificar o que "redireciona" você de volta para index.html. Infelizmente, não conheço o nginx bom o suficiente para ajudá-lo ainda mais.