У меня есть 3 сервера. Первый сервер имеет nginx в качестве балансировки нагрузки. Второй и третий серверы имеют Apache. В моем nginx conf у меня есть следующее:
upstream backend {
server ec2-54-148-248-231.us-west-2.compute.amazonaws.com;
server ec2-54-148-34-166.us-west-2.compute.amazonaws.com;
}
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.html index.htm;
# Make site accessible from http://localhost/
server_name localhost;
location / {
proxy_pass http://backend;
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}
}
Проблема в том, что когда я открываю первый сервер, он перенаправляет меня на второй или третий сервер, но я не могу загрузить относительные URL (например, файлы CSS или JS) внутри моего сайта, и все ссылки возвращают ошибку 404.
Можете ли вы попробовать мой сервер балансировки нагрузки в строке URL => http://ec2-54-148-96-241.us-west-2.compute.amazonaws.com/
Я обнаружил проблему, заключающуюся в том, что nginx с циклическим или наименее подключенным распределением нагрузки, каждый последующий клиентский запрос потенциально может быть распределен на другой сервер. так что на моем сайте после сделать первый запрос для ex => http://ec2-54-148-96-241.us-west-2.compute.amazonaws.com/site/index
тогда сделайте запрос http://ec2-54-148-96-241.us-west-2.compute.amazonaws.com/assets/f352c4d6/css/bootstrap.css он идет на другой сервер, но для ресурсов f352c4d6 не найден на другом сервере, поэтому верните 404.
решение:
вы должны использовать ip_hash; с балансировкой нагрузки nginx, чтобы сохранить один и тот же сервер для одного IP
также вы можете использовать leas_connect для распределения пользователей по минимальному трафику сервера.
Других решений пока нет …