I'm currently trying to get nginx to add a header to the response when it is sending some kind of 50* error. I already have an add_header directive on the http block, and that gets respected for all requests except it seems errors. I also tried the following in one of my vhosts:

location /mediocregopheristhecoolest {
    add_header X-Test "blahblahblah";
    return 502;                                                                                                    

Going to that page gives me a 502, but no header. Is this simply something nginx doesn't do, or am I doing it wrong?

  • Could you post the output of $ curl -I <url>//mediocregopheristhecoolest
    – Chida
    Aug 17, 2012 at 17:50

2 Answers 2


The documentation states that add_header "Adds the specified field to a response header provided that the response code equals 200, 204, 206, 301, 302, 303, 304, or 307. A value can contain variables." So it doesn't work with a 502.

I forgot to add that you can use the third party headers more module to add headers to other codes. You'll probably have to recompile to add it, though.

  • See comment of marat: the new nginx version supports setting the header irrespective of response code Feb 6, 2015 at 14:37

Since Nginx 1.7.5 you can use always to add a header irrespective of the response code:

add_header X-Test "blahblahblah" always;
  • 1
    Frustratingly, the version in Debian's repos is currently outdated (1.6.x), but nginx maintains their own repository with the latest stable build (1.8.x right now).
    – kungphu
    Mar 2, 2016 at 0:46
  • If you want to upgrade an already working debian system, debian backports is safer... packages.debian.org/jessie-backports/httpd/nginx The upstream package use different package organisation (may cause some downtime instead of the smooth nginx upgrade mechanism). And its postrm script removes the logs. And a couple of other small differences... Feb 2, 2017 at 11:34
  • This doesn't work for me. If I make nginx reply with 502 because all the upstream servers are unavailable due to fails, it doesn't send the header. I even tried setting on the http block
    – Freedo
    Oct 27, 2021 at 0:19
  • nevermind, it seems somehow wget was not displaying the header with -S, but with curl i could see it wtf
    – Freedo
    Oct 27, 2021 at 0:33

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .