Por que o Nginx está aceitando qualquer valor de URL após o domínio raiz?

Por que o Nginx está aceitando qualquer valor de URL após o domínio raiz?

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.

informação relacionada