Hi Fracis,
Thanks for taking a look. With it curl behaves as expected, but with
tools
like ab and httperf, I am not seeing bad gateway responses when both the
upstream servers are down. Read ahead for more details.
Below is info using ab request and curl request.
ab:
When one upstream server is up:
nginx console:
<<client_IP>> - - [14/Aug/2015:13:44:57 +0000] “GET / HTTP/1.0” 200 45
“-”
“ApacheBench/2.3”
<<client_IP>> - - [14/Aug/2015:13:44:57 +0000] “GET / HTTP/1.0” 200 45
“-”
“ApacheBench/2.3”
upstream httpd server console:
<<nginx_IP>> - - [14/Aug/2015:13:44:57 +0000] “GET / HTTP/1.0” 200 45
<<nginx_IP>> - - [14/Aug/2015:13:44:57 +0000] “GET / HTTP/1.0” 200 45
When both upstream servers are down:
2015/08/14 13:43:45 [error] 5#5: *14 connect() failed (111: Connection
refused) while connecting to upstream, client: <<client_IP>>, server: ,
request: “GET / HTTP/1.0”, upstream: “http://<upstream_1_IP>>:/”,
host: “<nginx_IP:”
2015/08/14 13:43:45 [error] 5#5: *14 connect() failed (111: Connection
refused) while connecting to upstream, client: <<client_IP>>, server: ,
request: “GET / HTTP/1.0”, upstream: “http://<upstream_2_IP>:/”,
host:
“<nginx_IP:”
2015/08/14 13:43:45 [error] 5#5: *14 no live upstreams while connecting
to
upstream, client: <<client_IP>>, server: , request: “GET / HTTP/1.0”,
upstream: “http://ab_backend/”, host: “<nginx_IP:”
<<client_IP>> - - [14/Aug/2015:13:43:45 +0000] “GET / HTTP/1.0” 502 172
“-”
“ApacheBench/2.3”
<<client_IP>> - - [14/Aug/2015:13:43:45 +0000] “GET / HTTP/1.0” 502 172
“-”
“ApacheBench/2.3”
as a result in bith cases ab just shows all successful responses:
ab -n 1 -c 1 http://<nginx_IP>:/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking <<nginx_IP>> (be patient)…done
Server Software: nginx/1.9.3
Server Hostname: 10.107.53.127
Server Port: 9000
Document Path: /
Document Length: 45 bytes
Concurrency Level: 1
Time taken for tests: 0.040 seconds
Complete requests: 1
Failed requests: 0
Write errors: 0
Keep-Alive requests: 1
Total transferred: 285 bytes
HTML transferred: 45 bytes
Requests per second: 24.85 [#/sec] (mean)
Time per request: 40.234 [ms] (mean)
Time per request: 40.234 [ms] (mean, across all concurrent
requests)
Transfer rate: 6.92 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 2 2 0.0 2 2
Processing: 39 39 0.0 39 39
Waiting: 38 38 0.0 38 38
Total: 40 40 0.0 40 40
curl:
when one upstream is up:
<<client_IP>> - - [14/Aug/2015:13:58:37 +0000] “GET / HTTP/1.1” 200 45
“-”
“curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.13.1.0
zlib/1.2.3 libidn/1.18 libssh2/1.2.2”
When both upstream servers are down:
2015/08/14 14:00:37 [error] 8#8: *26 connect() failed (111: Connection
refused) while connecting to upstream, client: <<client_IP>>, server: ,
request: “GET / HTTP/1.1”, upstream: “http://<upstream_1_IP>:/”,
host:
“<nginx_IP>:”
2015/08/14 14:00:37 [error] 8#8: *26 connect() failed (111: Connection
refused) while connecting to upstream, client: <<client_IP>>, server: ,
request: “GET / HTTP/1.1”, upstream: “http://<upstream_2_IP>:/”,
host:
“<nginx_IP>:”
<<client_IP>> - - [14/Aug/2015:14:00:37 +0000] “GET / HTTP/1.1” 502 172
“-”
“curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.13.1.0
zlib/1.2.3 libidn/1.18 libssh2/1.2.2”
and curl gets a “502 Bad Gateway” which is right.
Any suggestions what I might be doing wrong?
Posted at Nginx Forum: