Nginx drops server our LB if it see HTTP 400.

Brent Clark brentgclarklist at gmail.com
Thu Nov 16 13:03:49 UTC 2017


Good day Guys

I'm sitting with a very peculiar problem, and I was hoping someone could
be of assistance.

Right now everything is a theory, but when I switch back to LVS
everything works. Reason I like and want Nginx is for the reverse
caching (caching of images).

As said, Im using Nginx for reverse caching and load balancing, and I'm
seeing the following in the Nginx error log.

2017/11/16 10:16:38 [error] 75140#75140: *27952 no live upstreams while
connecting to upstream, client: 52.169.148.4, server:
REMOVEDCLIENTDOMAIN, request: "GET /1298310/SNIPPET_OF_URL HTTP/1.1",
upstream: "https://sslloadbalance/1298310/SNIPPET_OF_URL", host:
"REMOVEDCLIENTDOMAIN".

I understand that, Nginx says is cant connect to the backend servers,
but the backend servers are 100%.

My theory is, when ever a URL is called and an HTTP 400 is returned,
Nginx picks this up, and does not like it, and then drops the server
out., e.g.

REMOVED_IP_OF_LB - - [16/Nov/2017:10:16:38 +0200] "GET
/wp-admin/admin-ajax.php?action=yop_poll_load_js&id=-1&location=page&unique_id=_yp5a0d4965c79ac&ver=5.5
HTTP/1.0" 400 226 "-" "-"


My configuration(s) is very standard / basic.

https://pastebin.com/B6rFwnb6

https://pastebin.com/wsdGPC74

I would have liked to have used 'health_check', but that is only
available in Nginx Plus.

If I run a tcptraceroute to port 80 in a while loop to the back end
servers, everything is ok, and going back to LVS, everything is ok.

I would like to ask, If is a way to either ignore 400 error status or if
I can ask, what is a better way to manage and handle this.


Many thanks, regards

Brent





More information about the nginx mailing list