Мне нужна некоторая помощь, так как я столкнулся с парой проблем при реализации nginx в качестве обратного прокси-сервера, поддерживающего серверы Windows. Я использовал конфигурацию, которая работает в другом месте без проблем, но я вижу проблемы с большим количеством неудачных запросов (404) и кодами ошибок nginx 499.
Мы видим около 200 сообщений об ошибках 404 в журналах nginx при использовании настройки и только около 100 таких же ошибок при работе с IIS. Файлы есть в большинстве случаев, и одна и та же работа (все равно получать запросы) работает при прямом обращении к серверу Windows.
Сначала я понял, что что-то не так с моей настройкой с использованием почтовых запросов через nginx, но это лишь небольшой процент, поэтому не думайте, что есть что-то принципиально неправильное с настройкой поста nginx.
Код состояния 499, клиентское закрытое соединение кажется немного странным. Я вижу около 150-300 499 запросов на 20 тысяч запросов. Возможно, это все равно происходило, и мы просто не видим, чтобы о них сообщалось в IIS.
Вот конфигурация моего сайта nginx:
server {
listen 80;
server_name www.mydomain.com;
access_log /var/log/nginx/www.mydomain.com/mydomain.com.log main_ext;
location / {
proxy_pass http://mydomain;
health_check;
}
}
upstream myupsteam {
zone myupsteam 64k;
sticky cookie srv_id expires=1h domain=.mydomain.com path=/;
server IP;
}
На самом деле необходимо начать проталкивать трафик через эти серверы, поскольку серверы IIS борются с нагрузкой, но нужно просто разобраться в причинах ошибок, прежде чем мы сможем подписать переключение.
Я попытался изменить настройки тайм-аута прокси, привязать адрес прокси к частным сетевым адаптерам.
У кого-нибудь есть идеи?
Это должно было быть комментарием, но поскольку у меня недостаточно репутации на ServerFault, мне пришлось написать это в качестве ответа. Пожалуйста, простите за любые несоответствия.
Пока что я испытал с NGINX HTTP 499
ошибки (дружественные, известные как Client Connection Closed
или Failed to load: Connection reset by peer
) был вызван неправильными разрешениями в /var/lib/nginx
.
Поскольку я переключился на контейнерную среду веб-сервера с помощью Docker, мы выбрали NGINX в качестве обратного прокси для наших контейнеров без необходимости сопоставлять порты хоста в каждом контейнере.
В процессе утилизации основных proxy
контейнера в нашей среде, разрешения на /var/lib/nginx
запутались, и это временная папка, которую NGINX использует для хранения / извлечения запросов, отправленных через proxy_pass
директива.
Должным образом chown
рекурсивно через этот каталог к user:group
сопоставлен с процессом nginx и, при необходимости, исправляет разрешения для 775
был решением загадочно закрывающихся соединений при загрузке наших приложений.
Нам также нужно было проксировать заголовки HTTP, чтобы наши приложения правильно распознавали (а не сбрасывали / прерывали соединение), что им были переданы законно проксированные запросы, а также предоставляли нашим приложениям достаточно информации для правильной передачи информации.
Из нашей постановки /etc/nginx/snippets/proxy-headers.conf
:
proxy_set_header Host $ host;
proxy_set_header X-Real-IP $ remote_addr;
proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for;
proxy_set_header X-Client-Verify УСПЕХ;
proxy_set_header X-Client-DN $ ssl_client_s_dn;
proxy_set_header X-SSL-Subject $ ssl_client_s_dn;
proxy_set_header X-SSL-Issuer $ ssl_client_i_dn;
proxy_set_header Схема X-Forwarded-Proto $;
proxy_set_header X-Forwarded-Port $ server_port;
proxy_set_header Обновить $ http_upgrade;
proxy_set_header Подключение "Обновление";
proxy_pass_header Set-Cookie;
proxy_http_version 1.1;
proxy_read_timeout 900 с;
Ваши потребности могут (и, вероятно, будут) расходиться. При желании отрегулируйте и используйте их в качестве отправной точки. Мы также попытались улучшить конфигурации наших виртуальных хостов с помощью фрагментов, чтобы распространить изменения по всем конфигурациям, которые должны были использовать одни и те же заголовки, параметры SSL (например, разрешенные шифры, например) и т. Д.
Чтобы использовать подобные фрагменты, просто добавьте их на свой виртуальный хост, учитывая фрагмент и путь выше:
включить /etc/nginx/snippets/proxy-headers.conf;
PS: Приведенный выше фрагмент proxy-header.conf был получен с виртуального хоста с поддержкой SSL. Заголовки SSL категорически не нужны, если вы говорите по простому HTTP.