nginx 로드 밸런싱이 작동하지 않습니다.

nginx 로드 밸런싱이 작동하지 않습니다.

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.confserver {..}/etc/nginx/conf.d/load-balancer.conf

관련 정보