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

2

A primeira vez que configuramos o Nginx e meu objetivo é ter example.com com uma página 'index.html' estática, com uma configuração minimalista, nada mais. Eu também quero largar o subdomínio www. Aqui estão os meus blocos de servidores disponíveis no site:

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 o www sendo descartado automaticamente.

Meu problema é que eu posso digitar qualquer coisa depois que example.com e a página index.html ainda carregarem, como example.com/ABC ou example.com/12345. Essas páginas não existem, Por que os URLs são aceitos? Espero que qualquer URL diferente da raiz do domínio retorne uma página 404.

Este é provavelmente um problema muito simples, mas tentei pesquisar aqui & nos docs e estou chegando com nada até agora.

    
por Tom Brossman 20.12.2013 / 09:42

2 respostas

4

Parece o comportamento correto da cláusula try_files. Do wiki nginx:

Checks for the existence of files in order, and returns the first file that is found. A trailing slash indicates a directory - $uri /. In the event that no file is found, an internal redirect to the last parameter is invoked. Do note that only the last parameter causes an internal redirect, former ones just sets the internal URI pointer.

Portanto, se você procurar ABC ou 12345, o que não pode ser encontrado, um redirecionamento interno para index.html será invocado.

Experimente:

location / {
    try_files $uri $uri/ =404;
}

Procure aqui uma referência completa:

link

Baseado no comentário de Martin Fjordvald aqui 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;
}
    
por 20.12.2013 / 10:08
1

2 coisas que eu poderia pensar:

ou você tem um rewriterule de volta para o index.html

ou pode ser possível que você tenha uma página 404 personalizada vinculada ao index.html

pelo menos, 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" para o index.html infelizmente eu não sei nginx bom o suficiente para ajudá-lo ainda mais.

    
por 20.12.2013 / 09:46

Tags