Ошибка 502 неверного шлюза отображается при переключении между страницами сайта, а иногда и на домашней странице, но не для первого запроса на домашней странице, а только при перенаправлении на нее другой страницы. и это происходит с некоторыми файлами javascript
балансировка нагрузки настроена на двух восходящих php1 php2, оба являются сервером apache.
Когда я проверил журнал ошибок, мне понравилось:
no live upstreams while connecting to upstream
[error] 27212#0: *314 no live upstreams while connecting to upstream, client: ip_address , server: example.com, request: "GET / HTTP/1.1", upstream: "http://example.com", host: "example.com", referrer: "http://example.com/mypages/"
и это конфигурация сервера балансировки нагрузки
upstream example.com {
# ip_hash;
server php01 max_fails=3 fail_timeout=15s;
server php02 max_fails=3 fail_timeout=15s;
}
server {
listen IP:80;
server_name example.com;
access_log /var/log/nginx/example.com.access;
error_log /var/log/nginx/example.com.error error;
location / {
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-Forwarded-Proto $scheme;
proxy_pass http://$server_name/$uri;
proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment;
proxy_cache_bypass $http_pragma $http_authorization;
proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;
proxy_no_cache $http_pragma $http_authorization;
}
}
Я искал часами, и ничего полезного не обнаружил, мои потоки активны и никаких проблем с ними нет.
Это не проблема Nginx, проблема заключается в том, что ваши PHP-серверы не отвечают вовремя. Ты можешь добавьте логирование в Nginx, чтобы подтвердить это.
В качестве второй точки отсчета вы можете top
на сервере и вручную проверьте, не перегружает ли PHP процессор в течение определенного периода времени, это еще один индикатор медленных ответов.
Если вас устраивают очень медленные ответы PHP, вы можете попросить Nginx подождать дольше, прежде чем сдаваться:
# Wait 5 minutes before giving up on the backend!
proxy_read_timeout 5m;
Изучив журналы с информацией о времени, указанной выше, вы сможете определить, какие запросы обрабатываются PHP медленно.
Чтобы сузить проблему, отправьте эти запросы непосредственно в серверную часть PHP.
В зависимости от того, что происходит, вы также можете включить кеширование некоторых запросов в Nginx, избегая некоторых медленных запросов.
Не знаю, точно ли это то же самое, но для меня сработало добавить max_fails = 0 в конец имени сервера
восходящий sm_url {сервер LOAD_BALANCER_DOMAIN_NAME: max_fails = 0; }
Переименуйте восходящий поток на up_example.com и измените
proxy_pass http://$server_name/$uri;
быть
proxy_pass http://up_$server_name$uri;