Назад | Перейти на главную страницу

Почему Nginx обслуживает index.html вместо 404?

У меня есть сайт, на котором при запросе определенного файла JSON и его отсутствии запускается запрос на резервный файл JSON. Однако вместо того, чтобы получать 404 для первого файла, я получал содержимое index.html, который является недопустимым JSON и вызвал ошибку.

Я проследил проблему до этой директивы:

location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to index.html
                try_files $uri $uri/ /index.html;
            }

Как я могу заставить его служить 404 для mysite.com/some/nonexistent/file.json, но все равно получить index.html для mysite.com/?

После некоторого чтения я изменил try_files директива:

# Old way: fallback to index.html
try_files $uri $uri/ /index.html;

# New way: serve a 404 response
try_files $uri $uri/ =404;

Другой вариант:

# Fall back to this error page
try_files $uri $uri/ error_pages/404.html

У меня все еще есть эта директива для обслуживания index.html для mysite.com/:

server {
  # ...
  index index.html index.html;
  #...
}