![如何在一个 Apache 服务器上使用 2 个 IP](https://linux22.com/image/685060/%E5%A6%82%E4%BD%95%E5%9C%A8%E4%B8%80%E4%B8%AA%20Apache%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E4%BD%BF%E7%94%A8%202%20%E4%B8%AA%20IP.png)
我的专用 Linux 服务器 (Debian) 上有两个 IP(和域)。我可以访问主域。但是当我尝试访问第二个域时,我被定向到主站点。
在 中/etc/network/interfaces
,我有这个:
auto eth0
iface eth0 inet static
address 192.99.233.101
netmask 255.255.255.0
network 192.99.233.0
broadcast 192.99.233.255
gateway 192.99.233.254
auto eth0:0
iface eth0:0 inet static
address 149.56.155.72
netmask 255.255.255.255
post-up /sbin/ifconfig eth0:0 149.56.155.72 netmask 255.255.255.255 broadcast 149.56.155.72
pre-down /sbin/ifconfig eth0:0 down
我重启了网络:/etc/init.d/networking restart
然后我创建了两个新.conf
文件/etc/apache2/sites-available
,每个域一个。
站点1.conf:更新
<VirtualHost 192.99.233.101:80>
ServerAdmin webmaster@localhost
Servername site1.net
ServerAlias www.site1.net
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
站点2.conf:
<VirtualHost 149.56.155.72:80>
ServerAdmin [email protected]
ServerName site2.co
ServerAlias www.site2.co
DocumentRoot /var/www/html1
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
然后我运行了这三个命令:
`a2dissite 000-default.conf`
`a2ensite site1.conf`
`a2ensite site2.conf`
最后,我重新启动了 Apache。每次我尝试启动 site2 时,都会得到 site1。我已经为 site2 完成了 rdns,一切正常。
这是我第一次尝试做这样的事情。有人能看出我没有做什么吗……或者还需要做什么吗?谢谢。
更新:
root@dfwit:~# apachectl -t -D DUMP_VHOSTS
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using site2.co. Set the 'ServerName' directive globally to suppress this message
VirtualHost configuration:
*:443 site2.co (/etc/apache2/sites-enabled/default-ssl.conf:2)
*:80 is a NameVirtualHost
default server site2.co (/etc/apache2/sites-enabled/site2.conf:1)
port 80 namevhost site2.co (/etc/apache2/sites-enabled/site2.conf:1)
alias www.site2.co
port 80 namevhost site1.net (/etc/apache2/sites-enabled/site1.conf:1)
alias www.site1.net
root@dfwit:~#
这看起来对吗?
另一个更新
root@dfwit:~# getent hosts
127.0.0.1 localhost.localdomain localhost
192.99.233.101 xtremeirc.net xtremeirc.net
149.56.155.72 dfwit.co dfwit.co
127.0.0.1 ip6-localhost ip6-loopback
root@dfwit:~#
结果如下ping
:
root@dfwit:~# ping xtremeirc.net
PING xtremeirc.net (192.99.233.101) 56(84) bytes of data.
64 bytes from xtremeirc.net (192.99.233.101): icmp_seq=1 ttl=64 time=0.040 ms
root@dfwit:~# ping dfwit.co
PING dfwit.co (149.56.155.72) 56(84) bytes of data.
64 bytes from dfwit.co (149.56.155.72): icmp_seq=1 ttl=64 time=0.046 ms
因此 DNS 似乎解析正确。但 site1 仍会为 site2 加载。
答案1
您需要匹配的 DNS 条目。看来两个站点可能解析到同一个 IP。每个 IP 地址上定义的第一个 VHOST 将是默认站点,并处理任何无法解析的站点。
如果您想使用基于 IP 的域名,则需要匹配您的 DNS 配置。检查host
和/或的结果getent hosts
以查看您的 DNS 配置。
如果您使用的 IP 地址与所示相同,我希望每个 IP 组合都显示为单独的 NameVirtualHost 条目。在 Apache 2.4 之前,有一个 NameVirtualHost 指令可用于指定 VirtualHost IP/Port 组合。如果您使用的是 Apache 2.2,请尝试在 VirtualHost 规范之前添加匹配的 NameVirtualHost 指令。您可能需要删除现有的 NameVirtualHost *:80 指令。
您可以使用访问日志进行调试。将本地地址 ( %A
) 连同站点和端口 ( %v:%p
) 一起添加到日志中,可以确保流量在正确的 IP 地址上流动。对于 CGI 脚本,SERVER_ADDR
包含连接的本地 IP。
答案2
ServerName
通常,您应该根据需要为每个 vhost设置一个ServerAlias
。此外,您可能不需要在 vhost 配置中明确指定 IP。只需尝试同时<VirtualHost *:80>
为两者执行此操作即可。
除此之外,查看它的输出apachectl -t -D DUMP_VHOSTS
将告诉您您的虚拟主机是否按照您认为的方式实际配置。