我正在使用 nginx 作为反向代理从 memcached 查找 html 内容,如果不存在,则查找 node.js,如果甚至不存在,node.js 将返回 404。我想做的是拦截并为 node.js 返回的 404 提供自定义页面
问题是 nginx 没有返回正确的 404.html,而是返回默认的。
因此,虽然我可以拦截 404 页面,但 nginx 会提供默认错误页面,而不是 404.html
upstream memcached {
server 127.0.0.1:11211;
}
error_page 404 /404.html;
location /404.html {
internal;
}
location @memcached {
...
if ($memcached_request = 1) {
memcached_pass memcached;
error_page 404 502 504 = @nodejs;
}
if ($memcached_request = 0) {
error_page 404 502 504 = @nodejs;
}
}
location @nodejs {
proxy_pass http://127.0.0.1:7777;
...
error_page 404 /404.html;
proxy_intercept_errors on;
proxy_redirect off;
}
location / {
try_files $uri $uri/ @memcached;
error_page 403 = @nodejs;
}
有没有更好的方法来实现“如果不在 memcached 中,则转到 node.js”,而不是 error_page 404 = @fallback?如果没有,有没有办法从最后一个后端捕获 404?
答案1
也许它不想重定向到某个internal
位置?如果您再次尝试将其重定向到命名位置会怎样?例如@404
?
否则,听起来你可能必须启用recursive_error_pages
以使您的设置正常工作。