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";   
  }                                             
                                                
}