I run cPanel on a Rackspace cloud server that hosts about 30 websites. I am using Varnish 3.0.3 + Apache 2.2.23. I get random 503 errors. If I restart the httpd process, they will disappear. I checked Apache error_log and I don't see anything related to error 503.
Here is my Varnish configuration:
backend default { .host = "198.61.161.65"; .port = "8080"; .connect_timeout = 600s; .first_byte_timeout = 600s; .between_bytes_timeout = 600s; }
Here are my varnish launch options:
-a :80 -f /etc/varnish/default.vcl -T 127.0.0.1:6082 -t 120 -w 1,1000,120 -u varnish -g varnish -S /etc/varnish/secret -p http_max_hdr=256 -p http_resp_hdr_len=8192 -p http_range_support=on -s malloc,768M
I ran varnishlog and recorded some of the errors. All of them have TxResponse = Service Unavailable in them. For me, this means that Apache does not respond to a request from varnish in a timely manner. Here is an example:
17 SessionOpen c 74.133.75.136 54227 :80 17 ReqStart c 74.133.75.136 54227 1219297893 17 RxRequest c GET 17 RxURL c / 17 RxProtocol c HTTP/1.1 17 RxHeader c Host: www.archerytrade.org 17 RxHeader c User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:20.0) Gecko/20100101 Firefox/20.0 17 RxHeader c Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 17 RxHeader c Accept-Language: en-US,en;q=0.5 17 RxHeader c Accept-Encoding: gzip, deflate 17 RxHeader c DNT: 1 17 RxHeader c Connection: keep-alive 17 VCL_call c recv lookup 17 VCL_call c hash 17 Hash c / 17 Hash c www.archerytrade.org 17 VCL_return c hash 17 VCL_call c miss fetch 17 Backend c 18 default default 17 FetchError c http first read error: -1 0 (Success) 17 VCL_call c error deliver 17 VCL_call c deliver deliver 17 TxProtocol c HTTP/1.1 17 TxStatus c 503 17 TxResponse c Service Unavailable 17 TxHeader c Server: Varnish 17 TxHeader c Content-Type: text/html; charset=utf-8 17 TxHeader c Retry-After: 5 17 TxHeader c Content-Length: 441 17 TxHeader c Accept-Ranges: bytes 17 TxHeader c Date: Wed, 17 Apr 2013 01:39:52 GMT 17 TxHeader c X-Varnish: 1219297893 17 TxHeader c Age: 0 17 TxHeader c Via: 1.1 varnish 17 TxHeader c Connection: close 17 Length c 441 17 ReqEnd c 1219297893 1366162792.398471832 1366162792.541639328 0.000244379 0.143036604 0.000130892 17 SessionClose c error 17 StatSess c 74.133.75.136 54227 0 1 1 0 0 0 257 441
I tried adding the following to the default.vcl file:
sub vcl_recv { set req.grace = 15s; ... } sub vcl_fetch { if (beresp.status == 500 || beresp.status == 503) { set beresp.saintmode = 10s; return(restart); } set beresp.grace = 1h; ... }
During approximately 503 errors, I discovered a PHP Fatal error, an invalid end to the script headers, and Request exceeded the limit of 10 internal redirects due to a possible configuration error in Apache error_log.
I tried to increase / decrease memory for varnish and timeout value. I tried to add higher values โโof http_max_hdr and http_resp_hdr_len.