Static or dynamic content

Jens Dueholm Christensen JEDC at ramboll.com
Sat Oct 15 12:18:11 UTC 2016


On Friday, September 30, 2016 12:55 AM Francis Daly wrote,



>> No, I have an "error_page 503" and a similar one for 404 that points to two named locations, but that's it.



> That might matter.



> I can now get a 503, 404, or 405 result from nginx, when upstream sends a 503.

[...]

> Now make /tmp/x exist, and /tmp/y not exist.

>

> A GET request for /x is proxied, gets a 503, and returns the content of /tmp/x with a 503 status.

>

> A GET request for /y is proxied, gets a 503, and returns a 404 status.

>

> A POST request for /x is proxied, gets a 503, and returns a 405 status.

>

> A POST request for /y is proxied, gets a 503, and returns a 404 status.

>

> Since you also have an error_page for 404, perhaps that does something that leads to the output that you see.

>

> I suspect that when you show your error_page config and the relevant

> locations, it may become clearer what you want to end up with.



My local test config looks like this (log specifications and other stuff left out):



    server {

        listen       80;

        server_name localhost;



        location / {

            root html;

            try_files /offline.html @xact;

            add_header Cache-Control "no-cache, max-age=0, no-store, must-revalidate";

        }



        location @xact {

            proxy_pass http://127.0.0.1:4431;

            proxy_redirect default;

            proxy_read_timeout 2s;

            proxy_send_timeout 2s;

            proxy_connect_timeout 2s;

            proxy_intercept_errors on;

        }



        error_page 404 @error_404;

        error_page 503 @error_503;



        location @error_404 {

                root error;

                rewrite (logo.png)$ /$1 break;

                rewrite ^(.*)$ /error404.html break;

        }



        location @error_503 {

                root error;

                rewrite (logo.png)$ /$1 break;

                rewrite ^(.*)$ /error503.html break;

        }





> A test system which talks to a local HAProxy which has no "up" backends

> would probably be quicker to build.



Yes, thats what I had listening on 127.0.0.1:4431, and it did give me the same behaviour as I'm seeing in our production environment.





I got the following captures via pcap and wireshark:



Conditions are: HAProxy has a backend with no available servers, so every request results in a 503 to upstream client (nginx).



A POST request to some resource from a browser:



  POST /2 HTTP/1.1

  Host: localhost

  User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0

  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

  Accept-Language: en

  Accept-Encoding: gzip, deflate

  DNT: 1

  Content-Type: application/x-www-form-urlencoded

  Content-Length: 0

  Cookie: new-feature=1; Language_In_Use=

  Connection: keep-alive



This makes nginx send this request to HAProxy:



  POST /2 HTTP/1.0

  Host: 127.0.0.1:4431

  Connection: close

  Content-Length: 0

  User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0

  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

  Accept-Language: en

  Accept-Encoding: gzip, deflate

  DNT: 1

  Content-Type: application/x-www-form-urlencoded

  Cookie: new-feature=1; Language_In_Use=



HAProxy returns this:



  HTTP/1.0 503 Service Unavailable

  Cache-Control: no-cache

  Connection: close

  Content-Type: text/html



  <html><body><h1>503 Service Unavailable</h1>

  No server is available to handle this request.

  </body></html>



HAProxy also logs this (raw syslog packet):



  <134>Oct 15 13:17:33 jedc-local haproxy[10104]: 127.0.0.1:64746 [15/Oct/2016:13:17:33.800] xact_in-DK xact_admin/<NOSRV> 0/-1/-1/-1/0 503 212 - - SC-- 0/0/0/0/0 0/0 "POST /2 HTTP/1.0"



This makes nginx return this back to the browser:



  HTTP/1.1 405 Not Allowed

  Server: nginx/1.8.0

  Date: Sat, 15 Oct 2016 11:17:33 GMT

  Content-Type: text/html

  Content-Length: 172

  Connection: keep-alive



nginx also logs this:



  localhost 127.0.0.1 "-" [15/Oct/2016:13:17:33 +0200] "POST /2 HTTP/1.1" 405 172 503 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0" http "-" "-" "-" "-" -/-





There is no mention of the error_page 503 location or any of the resources they specify (logo.png or error503.html) in any of nginx' logs, so I assume that they are not really connected to the problems I see.



Any ideas?



Regards,

Jens Dueholm Christensen
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx/attachments/20161015/b324e768/attachment.html>


More information about the nginx mailing list