Static or dynamic content

Francis Daly francis at daoine.org
Thu Sep 29 22:02:28 UTC 2016


On Wed, Sep 28, 2016 at 11:01:36AM +0000, Jens Dueholm Christensen wrote:

Hi there,

> I've got an issue where nginx (see below for version/compile options)
> returns a 405 (not allowed) to POST requests to clients when the upstream
> proxy returns a 503.

I don't see that, when I try to build a test system.

Are you doing anything clever with error_page or anything like that?

> My config is basicly this

My config is exactly this:

===
http {
  server {
    listen 8080;
    location / {
      root /tmp;
      try_files /offline.html @xact;
    }
    location @xact {
      proxy_pass http://127.0.0.1:8082;
    }
  }

  server {
    listen 8082;
    return 503;
  }
}
===

Do you see the problem when you test with that?

(The file /tmp/offline.html does not exist.)

If not, what part of your full config can you add to the 8080 server
which causes the problem to appear?

  curl -i http://127.0.0.1:8080/x

does a GET.

  curl -i -d k=v http://127.0.0.1:8080/x

does a POST. (Use -v instead of -i for even more information.)

> When the request method is a POST nginx transforms this to a 405 "not
> allowed", which is - as far as I can understand from a number of posts
> found googling - is to be expected when POSTing to a static resource.

If you can build a repeatable test case -- either like the above, or
perhaps configure a HAProxy instance that will return the 503 itself --
then it should be possible to see what is happening.

> An individual backend instance can also return a 503 error if it
> encounters a problem servicing a request.
>
> That 503 response is sent back to HAProxy, which parses it along to
> nginx, which returns the 503 to the client (and it's NOT converted into
> a 405!), so I know that nginx doesn't translate all 503s to 405s if it's
> generated by a backend instance even if the request is POSTed.

If you can see the bytes on the wire between HAProxy and nginx in both
cases, the difference may be obvious.

> This leads me to think that somehow HAProxy does not provide the
> correct headers in the 503 errorpage to make nginx assume the response
> from HAProxy isn't dynamic.

I suspect that that is incorrect -- 503 is 503 -- but a config that
allows the error be reproduced will be very helpful.

Cheers,

	f
-- 
Francis Daly        francis at daoine.org



More information about the nginx mailing list