У меня есть Nginx, настроенный как обратный прокси-сервер, балансирующий нагрузку между двумя контейнерами докеров, работающими на одном сервере. При первой загрузке страницы страница загружается, но я получаю много ошибок 404 для всех файлов css и js:
При обновлении или открытии второй вкладки все эти ошибки исчезают и страница загружается нормально. Когда я уменьшаю это до обслуживания только одного контейнера, он также работает нормально.
Сначала я думал, что это связано с тем, что js и css запрашивались с одного и того же корневого URL-адреса, а некоторые аспекты балансировщиков нагрузки и контейнеров выдавали ошибки, поскольку кластер запросов для одного пользователя был сбалансирован между двумя серверами. Немного поэкспериментировав, я попытался использовать proxy_set_header Хост $host
(смотрящий здесь и здесь для ответов) - насколько я понимаю, это должно отправлять последующие запросы одного пользователя на один и тот же вышестоящий сервер. Это, казалось, сделало проблему более редкой, но не устранило ее полностью.
Мои оставшиеся вопросы (от обучающегося любителя!):
- Это правильное использование
proxy_set_header
, и возможно ли, таким образом, обслуживать js/css с одного и того же вышестоящего сервера одному пользователю, а не распределять нагрузку между этими относительно небольшими запросами между двумя серверами?
- Является ли это вероятным корнем проблемы, что второй контейнер должен отвечать на некоторые запросы, вызванные загрузкой страницы для первого контейнера, эти ответы каким-то образом не совпадают?
- Моя пользовательская база будет состоять из 100-200 пользователей, одновременно получающих доступ к удаленному URL-адресу из одного места. я не думаю
ip_hash
будет ли тогда работать, поскольку все запросы будут поступать с одного и того же IP? Есть ли другие способы более эффективно привязать одного пользователя к одному серверу?
Мой файл конфигурации nginx:
восходящий сервер {
наименьшее_соединение;
локальный хост сервера: 4000;
локальный хост сервера: 4001;
}
сервер {
слушать 80;
слушать [::]:80;
имя_сервера хххххххххх;
место расположения / {
прокси_пасс http://бэкэнд;
proxy_redirect http://backend/ $scheme://$host/;
прокси_http_версия 1.1;
proxy_set_header Обновить $http_upgrade;
proxy_set_header Хост $host;
proxy_set_header Соединение $connection_upgrade;
proxy_read_timeout 20 дней;
прокси_буферизация выключена;
}
}