Я использую Google Compute Engine. Я настроил диспетчер развертывания, и он настроил брандмауэр, который позволяет сетевому LB подключаться к веб-серверам, сами веб-серверы добавляют их в диспетчер групп экземпляров, и он настроил автомасштабирование, нацеленное на диспетчер групп экземпляров, HTTP Health Check — это настройка, которая будет выполняться для экземпляров веб-серверов, она добавляет проверки работоспособности HTTP к бэкэнд-службе и добавляет диспетчер групп экземпляров к бэкэнд-службе, она настраивает URL-карту, которая имеет бэкэнд-службу в качестве службы по умолчанию, а URL-картограф, в свою очередь, добавляется к HTTP-прокси, на который указывает правило пересылки с глобальным IP-адресом.
Эта установка очень похожа на установку, описанную здесь.https://cloud.google.com/solutions/scalable-and-resilient-apps
Итак, теперь о проблеме, которую я, кажется, могу решить для этой настройки. У меня есть сервер Nginx, работающий на веб-серверах, и он отвечает на запросы, и я могу создавать соединения источника событий с ним, но ровно через 1 минуту соединение закрывается с ошибкой INCOMPLETE_CHUNKED_ENCODING. Этого не происходит, если я подключаюсь напрямую к одному из веб-серверов. Я изменил настройку sysconf для tcp keepalive на:
net.ipv4.tcp_keepalive_time=600
net.ipv4.tcp_keepalive_intvl=15
net.ipv4.tcp_keepalive_probes=5
Это после прочтенияhttps://cloud.google.com/compute/docs/troubleshooting#networktraffic
Я перепробовал бесчисленное множество вариантов конфигурации nginx и, похоже, не могу найти решение.
Есть ли у кого-нибудь идеи или похожие проблемы?
решение1
Алекс был прав, поделившись ссылкой на этот пост, потому что она ведет к основной проблеме, но требует небольшого пояснения.
Вам нужно будет изменить значение 'keepalive_timeout' (по умолчанию 65) в вашем файле конфигурации Nginx ( /etc/nginx/nginx.conf), чтобы увеличить тайм-аут HTTP-соединения, чтобы ваш тайм-аут был больше, чем 600 секунд тайм-аута в балансировщике нагрузки. Это приводит к тому, что стороной, которая закрывает неактивные соединения, становится балансировщик нагрузки, а не nginx.
Настройте nginx keepalives для работы с балансировщиком нагрузки Google Cloud Platform HTTP(S).
Установите «keepalive_timeout 650;» в nginx/etc/nginx/nginx.conf
keepalive_timeout 650;
keepalive_requests 10000;
Более подробная информация оhttp-устойчивость.
решение2
Вероятно, вам nginx
потребуетсянекоторая настройка.