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:
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;
}