我有以下 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 遇到对不存在的文件的请求时,它会通过 404 页面显示 index.php 页面。问题是似乎 apache(这是被代理回的)在收到请求时仍在尝试解决原始请求。如果我去http://example.com/blahblah,我会返回错误:
The requested URL /blahblah was not found on this server.
这是一个 apache 错误。我怎样才能使 index.php 显示为 404 页面,就好像它是一个静态文件一样?
您使用的是哪个版本的 nginx?此问题已在 1.1.12 中解决:http: //nginx.org/en/CHANGES
编辑:如果您无法更新,您可以将当前的 error_page 和 try_files 替换为:
nginx 将不得不拦截 Apache 的响应以识别 404 版本,并返回它自己的。
如果 nginx 没有办法做到这一点,那么也许您可以将 Apache 配置为不返回任何东西——从而触发 nginx 自己的 404 状态?
如果你坚持使用 Apache,你将不得不设置 Apache 重写规则来向你的应用程序发送 404 错误,而不是在 nginx 的配置中。