下面的附图代表了我正在构建的应用程序堆栈。 Apache节点是彼此的精确复制品,它们每个都服务于相同的虚拟主机,例如example1.com,example2.com和example3.com。此外,对于具有数据库后端的Apache节点所服务的vhost,数据库将托管在Galera集群节点上。所有这些节点都运行Ubuntu 16.06。
到目前为止,我已成功配置了大部分此设置,但我似乎无法通过Nginx Web负载均衡器传递主机名。例如,当我访问example1.com(并不断刷新)时,我可以看到应用程序正在从每个Apache节点交替提供服务。
但是当我去example2.com时,仍会显示example1.com。这不是我的本地/etc/hosts
文件的问题。我相信它是因为我没有正确配置Nginx负载均衡器来传递主机名,以便它被Apache节点解释。
以下是我在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;
}
}
以下是Apache节点的3个vhost文件:
#/etc/apache2/sites-available/example1.dev.conf
<VirtualHost *:80>
ServerName example1.dev
ServerAlias www.example1.dev
ServerAdmin webmaster@example1.dev
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 webmaster@example2.dev
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 webmaster@example3.dev
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负载均衡器之前,Apache vhost配置工作正常。它们都在sites-enabled
我猜这是因为如果Apache在这种情况下不知道如何处理请求,那么Apache会加载第一个启用了网站的网站。是吗?
在某些情况下,我通常是网络/移动应用程序开发人员,但我最近一直在深入研究开发,网站可靠性和编排/自动化。这是我第一个测试的项目。
有谁能给我一些关于如何做到这一点的见解?非常感谢提前!
答案 0 :(得分:0)
我只需要将proxy_set_header Host $http_host;
添加到nginx服务器块配置文件中,如下所示:
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;
}
}
我对每个服务器块做了这个,现在它可以工作了!