Search code examples
nginxfastcgi

FastCGI and Nginx - Return HTTP Status


I have a custom FastCGI application behind Nginx and I'm struggling to get Nginx to return anything other than a 200 status code.

I've tried the following:

  • Setting fast_cgi_intercept_errors on.

  • Returning codes via ApplicationStatus in the EndRequest.

  • Returning Errors on the StdError stream.

  • Sending any of following headers:

    • "Status: 404 Not Found"

    • "HTTP/1.1 404 Not Found"

    • "X-PHP-Response-Code: 404"

    • "Status: 404 Not Found;"

    • "HTTP/1.1 404 Not Found;"

    • "X-PHP-Response-Code: 404;"

Any help would be great, I'm very stuck.


Solution

  • nginx discards the "HTTP/1.1 304 Not Modified\r\n".

    nginx uses (and eats) the Status header.

    If my fastcgi program returns the header "Status: 304\r\n".

    Then I get this response:

    HTTP/1.1 304
    Server: nginx/1.6.2
    Date: Sat, 21 May 2016 10:49:27 GMT
    Connection: keep-alive
    

    As you can see there is no Status: 304 header. It has been eaten by nginx.