На одном из серверов обнаружили странное поведение Varnish, который при непонятных (для начала) обстоятельств выдавал 503 ошибку. После некоторого анализа и изучения логов удалось выяснить, что ошибка:
FetchError c http read error: -2 0 (Success)
имела отношение к размеру Cookie в HTTP заголовках, отдаваемым веб сервером apache. Во время изучения документации обнаружили параметр http_max_hdr, который по умолчанию равняется 64 строкам и устанавливает ограничение на размер заголовков HTTP, принимаемым от бэкенда. http_max_hdr
Units: header lines
Default: 64
Maximum number of HTTP headers we will deal with in client request
or backend reponses. Note that the first line occupies five header
fields. This paramter does not influence storage consumption, objects
allocate exact space for the headers they store.
Значение указанного параметра изменили до 256, и ошибка перестала возникать. Для этого на сервере под управлением CentOS в файл /etc/sysconfig/varnish в параметры запуска демона добавили строку: -p http_max_hdr=256
Конечный вариант у нас получился примерно следующего содержания:
VARNISH_VCL_CONF=/etc/varnish/default.vcl
VARNISH_LISTEN_PORT=6081
VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1
VARNISH_ADMIN_LISTEN_PORT=6082
VARNISH_SECRET_FILE=/etc/varnish/secret
VARNISH_MIN_THREADS=50
VARNISH_MAX_THREADS=1000
VARNISH_THREAD_TIMEOUT=120
VARNISH_STORAGE="malloc,3G"
VARNISH_TTL=120
DAEMON_OPTS="-a ${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT} \
-f ${VARNISH_VCL_CONF} \
-T ${VARNISH_ADMIN_LISTEN_ADDRESS}:${VARNISH_ADMIN_LISTEN_PORT} \
-t ${VARNISH_TTL} \
-w ${VARNISH_MIN_THREADS},${VARNISH_MAX_THREADS},${VARNISH_THREAD_TIMEOUT} \
-u varnish -g varnish \
-S ${VARNISH_SECRET_FILE} \
-s ${VARNISH_STORAGE} \
-p http_max_hdr=256"
Удачи!
|