2017-11-10 4 views
0

以下の添付画像は、私が構築しているアプリケーションスタックを表しています。 Apacheノードは互いの正確なレプリカであり、それぞれ同じ仮想ホストに対応しています。たとえば、example1.com、example2.com、example3.comとしましょう。さらに、データベースバックエンドを持つApacheノードが提供する仮想ホストの場合、データベースはGaleraクラスタノードでホストされます。これらのノードはすべてUbuntu 16.06を実行しています。Nhostxをvhostsを持つApacheサーバーのロードバランサとして使用する

Nginx Webロードバランサを通じてホスト名を渡すことができないことを除いて、これまでの設定のほとんどを正常に設定することができました。例えば私がexample1.comに行って(そして継続的にリフレッシュする)、私は、アプリケーションが各Apacheノードから交互に提供されていることが分かります。

私がexample2.comに行くと、まだexample1.comが表示されます。これは私のローカル/etc/hostsファイルの問題ではありません。私は、NginxロードバランサがApacheノードによって解釈されるようにホスト名を渡すように正しく設定していないためだと思います。ここで

は、Apacheノードのための私の3つのバーチャルホストファイルを sites-enabled

#/etc/nginx/sites-enabled/example1.dev 
upstream example1 { 
    least_conn; 
     server do.webserver1:80; 
     server do.webserver2:80; 
    } 

server { 
    listen 80; 
    server_name example1.dev; 
    location/{ 
    proxy_pass http://example1; 
    } 
} 

#/etc/nginx/sites-enabled/example2.dev 
upstream example2 { 
    least_conn; 
     server do.webserver1:80; 
     server do.webserver2:80; 
    } 

server { 
    listen 80; 
    server_name example2.dev; 
    location/{ 
    proxy_pass http://example2; 
    } 
} 

#/etc/nginx/sites-enabled/example3.dev 
upstream example3 { 
    least_conn; 
     server do.webserver1:80; 
     server do.webserver2:80; 
    } 

server { 
    listen 80; 
    server_name example3.dev; 
    location/{ 
    proxy_pass http://example3; 
    } 
} 

にリンクされ、ここにいる私の3 nginxのサーバーのブロックです:Apacheのバーチャルホストの設定は、前に正常に働いていた

#/etc/apache2/sites-available/example1.dev.conf 
<VirtualHost *:80> 
     ServerName example1.dev 
     ServerAlias www.example1.dev 
     ServerAdmin [email protected] 
     DocumentRoot /var/www/example1.dev/public_html 

     ErrorLog /var/www/example1.dev/error.log 
     LogLevel warn 
     CustomLog /var/www/example1.dev/access.log combined 
</VirtualHost> 
<Directory "/var/www/html/example1.dev/public_html"> 
     AllowOverride All 

     Order allow,deny 
     Allow from all 
</Directory> 

#/etc/apache2/sites-available/example2.dev.conf 
<VirtualHost *:80> 
     ServerName example2.dev 
     ServerAlias www.example2.dev 
     ServerAdmin [email protected] 
     DocumentRoot /var/www/example2.dev/public_html 

     ErrorLog /var/www/example2.dev/error.log 
     LogLevel warn 
     CustomLog /var/www/example2.dev/access.log combined 
</VirtualHost> 
<Directory "/var/www/html/example2.dev/public_html"> 
     AllowOverride All 

     Order allow,deny 
     Allow from all 
</Directory> 

#/etc/apache2/sites-available/example3.dev.conf 
<VirtualHost *:80> 
     ServerName example1.dev 
     ServerAlias www.example3.dev 
     ServerAdmin [email protected] 
     DocumentRoot /var/www/example3.dev/public_html 

     ErrorLog /var/www/example3.dev/error.log 
     LogLevel warn 
     CustomLog /var/www/example3.dev/access.log combined 
</VirtualHost> 
<Directory "/var/www/html/example3.dev/public_html"> 
     AllowOverride All 

     Order allow,deny 
     Allow from all 
</Directory> 

私はNginx loadbalancerを追加しました。これらはすべてリンクされていますsites-enabled

私の推測は、この場合のリクエストをどう処理するかを認識しないと、Apacheが最初にサイト対応をロードするためです。そうですか?

私は通常、ウェブ/モバイルアプリケーションの開発者ですが、私は最近、devオペレーション、サイトの信頼性、オーケストレーション/オートメーションに没頭しています。これは私がテストしている最初のプロジェクトです。

誰でも私にこれをどうやってできるかについていくつかの洞察を与えることができますか?事前にありがとう!

Graphical representation of application cluster

答えて

0

私は単純に以下のようなnginxのサーバーブロックの設定ファイルにproxy_set_header Host $http_host;を追加する必要:

upstream example2 { 
    least_conn; 
     server do.webserver1:80; 
     server do.webserver2:80; 
    } 

server { 
    listen 80; 
    server_name example2.dev www.example2.dev; 
    proxy_set_header Host $http_host; 
    location/{ 
    proxy_pass http://example2; 
    } 
} 

私は、各サーバのブロックにこれを行なったし、今では動作します!

関連する問題