nginx 后端 returns 404,当使用拦截指令时 returns 403
nginx backend returns 404, when using intercept directive it returns 403
我在以下位置配置了 nginx:
location /some/path- {
limit_except GET { deny all; }
proxy_pass http://my_app;
}
location / {
deny all;
}
我只允许 GET/HEAD 请求 /some/path-
。
我需要对 /some/path-
的所有请求,这些请求在后端到 return nginx 的 404.html 而不是后端。
位置好:
http:///some/path-exists
错误的位置:
http:///some/path-doesnt-exist
当我尝试添加时:
proxy_intercept_errors on;
和
error_page 404 /404.html;
当浏览到 Bad 位置时,我似乎看到 403 Forbidden 而不是 nginx 404.html 页面。我不明白为什么。
根据您的配置,这是正常现象。 NGINX 为传入请求找到最匹配的位置块。在你的情况下:
/some/path-sfsdafhsdaiufasdf` -> Match /some/path-
/some/path/sadfasdf -> Match /
但是您的后备位置 / 有一个 deny all
。这就是为什么您会看到 403 被禁止。这与proxy_intercept_errors on
.
无关
试试这个
server {
listen 8001;
# Convert all 403 to 404 and send it to the internal 404-location.
error_page 403 =404 /@404;
location /some/path- {
limit_except GET { deny all; }
proxy_pass http://mybackend;
}
location / {
deny all;
}
location /@404 {
return 404 "Ouch, that did not work well!\n";
}
}
我在以下位置配置了 nginx:
location /some/path- {
limit_except GET { deny all; }
proxy_pass http://my_app;
}
location / {
deny all;
}
我只允许 GET/HEAD 请求 /some/path-
。
我需要对 /some/path-
的所有请求,这些请求在后端到 return nginx 的 404.html 而不是后端。
位置好: http:///some/path-exists
错误的位置: http:///some/path-doesnt-exist
当我尝试添加时:
proxy_intercept_errors on;
和
error_page 404 /404.html;
当浏览到 Bad 位置时,我似乎看到 403 Forbidden 而不是 nginx 404.html 页面。我不明白为什么。
根据您的配置,这是正常现象。 NGINX 为传入请求找到最匹配的位置块。在你的情况下:
/some/path-sfsdafhsdaiufasdf` -> Match /some/path-
/some/path/sadfasdf -> Match /
但是您的后备位置 / 有一个 deny all
。这就是为什么您会看到 403 被禁止。这与proxy_intercept_errors on
.
试试这个
server {
listen 8001;
# Convert all 403 to 404 and send it to the internal 404-location.
error_page 403 =404 /@404;
location /some/path- {
limit_except GET { deny all; }
proxy_pass http://mybackend;
}
location / {
deny all;
}
location /@404 {
return 404 "Ouch, that did not work well!\n";
}
}