如何在一个 Apache 服务器上使用 2 个 IP

如何在一个 Apache 服务器上使用 2 个 IP

我的专用 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将告诉您您的虚拟主机是否按照您认为的方式实际配置。

相关内容