Nginx 404 страницы поведения
У меня есть следующая конфигурация сервера nginx:
server {
listen 80;
server_name example.com
root /server/root;
index index.php;
error_page 404 = /index.php;
location ~ \.php$ {
try_files $uri =404;
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Request-URI $request_uri;
}
}
Мне нужно поведение, когда nginx встречает запрос на файл, который не существует, вместо этого он показывает страницу index.php в виде страницы 404. Проблема в том, что кажется, что apache (то, к чему возвращается прокси) все еще пытается разрешить исходный запрос, когда он получает запрос. Если я перехожу на http://example.com/blahblah, я получаю сообщение об ошибке:
The requested URL /blahblah was not found on this server.
Что является ошибкой Apache. Как я могу сделать так, чтобы index.php отображался как страница 404 так же, как если бы это был статический файл?
3 ответа
Какую версию nginx вы используете? Эта проблема была решена в 1.1.12: http://nginx.org/en/CHANGES
РЕДАКТИРОВАТЬ: Если вы не можете обновить, вы можете заменить ваши текущие error_page и try_files на:
location / {
try_files $uri $uri /index.php;
}
location ~ \.php$ {
# Leave the =404 at the end so we don't 500 when /index.php doesn't exist
try_files $uri /index.php =404;
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Request-URI $request_uri;
}
nginx должен будет перехватить ответ Apache, распознать 404 версии и вернуть свою собственную.
Если у nginx нет способа сделать это, то, возможно, вы могли бы настроить Apache так, чтобы он ничего не возвращал - тем самым вызывая собственное состояние 404 nginx?
Если вы настаиваете на использовании Apache, вам придется настроить правила перезаписи Apache для отправки ошибок 404 в ваше приложение, а не в конфигурацию nginx.