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のデフォルトのWebページが表示され、ノード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

関連情報