我有 nginx 作为 LB。以及 2 个 Apache 作为 Web 服务器。可以说我有不同的域:
- www.example.com
- checkout.example.com
两个域将位于相同的 2 个 Apache 服务器中。但是ofcoz在不同的目录下。并与VHost
Apache vhost 文件上的不同文件。
就像下面的设计:
Nginx
|
-------------
| |
Apache Apache
以下是我当前现有的 Nginx .conf 文件,该文件不适用于第二个域(checkout.example.com)。
来自 NGINX(mysites.conf):
upstream serverpool {
server 1.2.3.101:80 weight=1;
server 1.2.3.102:80 weight=1;
}
server {
listen 80;
server_name www.example.com checkout.example.com;
location / {
proxy_pass http://serverpool;
}
}
来自两个 Apache 服务器的相同Vhost 文件 (httpd.conf):
<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /var/www/html/www.example.com/
</VirtualHost>
<VirtualHost *:80>
ServerName checkout.example.com
DocumentRoot /var/www/html/checkout.example.com/
</VirtualHost>
但是每当我浏览那个(http://checkout.example.com)时,域仍然会出现在浏览器中..但内容是 (www.example.com),这是完全错误的。
请问我做错了什么?
你应该几乎总是设置
Host
标题。否则,nginx 会退回到默认值proxy_set_header Host $proxy_host;
,在您的情况下,serverpool
这对 apache 来说是无用的。有关详细信息,请参阅http://nginx.org/r/proxy_set_header和http://nginx.org/r/proxy_pass。
您还需要将 HOST: 标头发送到您的上游服务器 IP
这篇文章完全是在质疑
让 nginx 在反向代理时传递上游的主机名
你的 nginx 配置也应该是这样的