如何在 Nginx 中为 400 和 500 proxy_pass 后端响应设置自定义标头?

如何在 Nginx 中为 400 和 500 proxy_pass 后端响应设置自定义标头?

我需要根据 proxy_pass 后端响应代码的响应设置自定义响应标头的不同值。

我尝试了许多不同的方法,但仍然不知道如何做到这一点。

location /mypath {
    #for 200,301,302,etc "good" responses from 127.0.0.1:8080 I need to set value 60
    add_header X-MyCustomHeader 60;

    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://127.0.0.1:8080;

    #for 404,403 responses from 127.0.0.1:8080 I need to set X-MyCustomHeader=5
    #for 500 responses from 127.0.0.1:8080 I need to set X-MyCustomHeader=1
}

任何帮助都将受到赞赏。

答案1

我想出了以下解决方案。它解决了以下问题:

  1. 根据来自 proxy_pass 后端的响应代码设置 HTTP 响应标头
  2. 允许从后端服务器提供 404 页面内容,但仍添加标题。

已知问题:

  1. 从技术上讲,如果是 404,它会调用后端两次。对我来说这不是问题,因为我用一些小的 ttl 缓存了 404 响应。但对其他人来说,这可能是个问题。

我的消息来源:

location /mypath/ {
    add_header X-MyCustomHeader 60;

    include /etc/nginx/proxy_config.conf; #some proxy_pass headers
    proxy_pass http://127.0.0.1:8080;
    proxy_intercept_errors on;
    error_page 500 502 503 504 /50x.html;
    error_page 400 403 404 =404 /mypath/errors/404.html;
}

# custom 50x fallback page for /mypath/, server from the nginx itself
location /50x.html {
    add_header X-MyCustomHeader 1;

    root html;
}

# custom 40x fallback page for /mypath/, served from the backend - hack
location /mypath/errors/404.html  {
    add_header X-MyCustomHeader 5;

    include /etc/nginx/proxy_config.conf; #some proxy_pass headers
    proxy_pass http://127.0.0.1:8080;
    proxy_intercept_errors off;
}

这个问题作为参考

这个

这种方法是否存在任何问题/顾虑?

相关内容