我的服务器有两个 IP 192.168.1.90 和 192.168.1.99 我希望 nginx 在 192.168.1.99 上监听,Apache 在 192.168.1.90 上监听,我还需要在 apache 上托管多个虚拟主机。
尝试修改 apache 的 ports.conf 为
NameVirtualHost 192.168.1.90:80
Listen 80
<IfModule mod_ssl.c>
# If you add NameVirtualHost *:443 here, you will also have to change
# the VirtualHost statement in /etc/apache2/sites-available/default-ssl
# to <VirtualHost *:443>
# Server Name Indication for SSL named virtual hosts is currently not
# supported by MSIE on Windows XP.
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
然后我在 apache 中托管了一个虚拟主机
<VirtualHost 192.168.1.90:80>
DocumentRoot /home/webmaster/www/thefactor/
ServerName www.XYZ.com
ServerAlias XYZ.cu.com
# Other directives here
</VirtualHost>
问题是所有流量,所有到达 192.168.1.90 的请求,无论域名如何,都会加载 XYZ.com。即:如果我将 ABC.com 指向 192.168.1.90,那么当我浏览它时,它会加载 XYZ.com 页面,但地址栏中的地址仍为 ABC.com,所以它不是重定向。
知道为什么会发生这种情况吗
答案1
您定义的第一个虚拟主机将是“默认”主机。因此,所有未在其他地方配置的域的请求都将转到此第一个主机。
如果您希望忽略未在服务器上配置但指向该服务器的域的请求,则需要创建一个单独的“捕获所有”虚拟主机,该虚拟主机会拒绝所有请求,并在 othhosts 之前列出。
<VirtualHost 192.168.1.90:80>
#Dummy Host denies all accesses.
Order Allow, Deny
Deny from all
</VirtualHost>
<VirtualHost 192.168.1.90:80>
DocumentRoot /home/webmaster/www/thefactor/
ServerName www.XYZ.com
ServerAlias XYZ.cu.com
# Other directives here
</VirtualHost>
答案2
您需要将 Listen 指令缩小到 192.168.1.90,否则 Apache 将监听所有 IP(并且传入的请求将命中默认虚拟主机)。
Listen 192.168.1.90:80
Listen 192.168.1.90:443