nginx 로드 밸런싱 구성에서 이 문제가 발생했습니다. 로드 밸런싱 서버는 백엔드 서버로 전달하기를 원하지 않습니다.
다음과 같이 서버 구성을 설정했습니다.
Hostname ip_address role
nginx-node1.phann.net 172.17.45.103 nginx webserver
nginx-node2.phann.net 172.17.45.107 nginx webserver
nginx-node3.phann.net 172.17.45.108 nginx webserver
phann.net 172.17.45.113 load balancer
내 로드 밸런서 구성은 "/etc/nginx/conf.d/load-balancer.conf", 사용vhost
, 다음과 같이 작성되었습니다.
upstream website {
server nginx-node1.phann.net;
server nginx-node2.phann.net;
server nginx-node3.phann.net;
}
server {
listen 80; # Listen on the external interface
location / {
proxy_pass http://website;
}
}
게다가 나는PHP 활성화모든 서버에서. 내 구성은 양호하며 오류가 없습니다.
대체 구성으로 호스트 이름을 IP 주소로 바꿔 보았습니다.
upstream website {
server 172.17.45.103;
server 172.17.45.107;
server 172.17.45.108;
}
server {
listen 80; # Listen on the external interface
location / {
proxy_pass http://website;
}
}
마지막으로 로드 밸런싱 서버를 테스트하면 항상 nginx의 기본 웹 페이지가 표시되고 노드 3까지 노드 1로 전달되지 않습니다. 하지만 모든 것이 맞는지 확인했습니다. 내 구성 중 어느 부분이 누락되었거나 실수했는지 알고 싶습니다. 많은 연구를 했지만 여전히 이유를 이해하지 못합니다."상류"가 작동하지 않습니다.
다음 튜토리얼을 사용하고 있습니다. http://www.itadminstrator.com/2017/07/how-to-configure-nginx-load-balancer-on.html?showComment=1516785023396
답변1
NGinx 로드 밸런서가 올바르게 구성되었습니다.
문제는 DNS 및 NGinx에서 이름을 얻을 수 없거나 적어도 다른 Linux 애플리케이션처럼 DNS 해석기에서 기본적으로 이름을 얻을 수 없다는 것입니다 proxy_pass
./etc/hosts
바라보다Proxy_pass는 DNS를 확인하기 위해 /etc/hosts를 사용하지 않습니다.
가상 호스트를 다루지 않는 경우 이 링크에서 제안한 것보다 간단한 임시 솔루션은 NGinx 구성에서 FQDN 대신 IP 주소를 사용하는 것입니다.
답변2
이것이 답변이므로 질문에서 추출되었습니다.
그러다가 문제를 발견했습니다. 기본적으로 나가기 때문에 /etc/nginx/nginx.conf
스크립트에는 이중 정의가 있습니다 server {..}
.
스크립트의 명령문이 실행될 수 있으려면 의 server {..}
스크립트를 제거하거나 주석 처리해야 합니다 ./etc/nginx/nginx.conf
server {..}
/etc/nginx/conf.d/load-balancer.conf