![VirtualHost 在多个接口上失败](https://linux22.com/image/695368/VirtualHost%20%E5%9C%A8%E5%A4%9A%E4%B8%AA%E6%8E%A5%E5%8F%A3%E4%B8%8A%E5%A4%B1%E8%B4%A5.png)
我有一个具有多个接口的实例,并且我正在尝试使用基于 IP 的虚拟主机配置 Apache 来服务多个网站,但由于某种原因,它只返回主文档根目录。
我跟着这教程让多个接口正常工作。
怎么了:网站应该显示/var/www/mydomain/index.html
,但却显示/var/www/html/index.html
。
我已尝试过:在 VirtualHost 中使用 *:80,虽然可行,但目标是让多个 VirtualHost 分别来自不同的 IP/接口。从 VirtualHost 中删除端口:没有任何作用。更改Listen 80
为Listen 92.168.1.231:80
,结果失败Cannot assign requested address: AH00072: make_sock: could not bind to address 92.168.1.231:80
。这令人担忧,我找不到任何解释发生了什么的解释。没有其他东西在监听端口,如果我只监听所有 80 个端口,它就可以正常工作。
有关我的配置的信息:
/sbin/ifconfig
eth0:标志=4163 mtu 1500
inet 192.168.1.231 网络掩码 255.255.255.0 广播 192.168.1.255
inet6 fe80::f816:3eff:fee7:b528 prefixlen 64 scopeid 0x20
ether fa:16:3e:e7:b5:28 txqueuelen 1000(以太网)
RX 数据包 8812 字节 6501811(6.2 MiB)
RX 错误 0 丢弃 0 超限 0 帧 0
TX 数据包 3884 字节 331594(323.8 KiB)
TX 错误 0 丢弃 0 超限 0 载波 0 冲突 0eth1:flags=4163 mtu 1500
inet 192.168.1.232 网络掩码 255.255.255.0 广播 192.168.1.255
inet6 fe80::f816:3eff:fea1:e658 prefixlen 64 scopeid 0x20
ether fa:16:3e:a1:e6:58 txqueuelen 1000(以太网)
RX 数据包 10623 字节 788238(769.7 KiB)
RX 错误 0 丢弃 0 超限 0 帧 0
TX 数据包 5290 字节 1647702(1.5 MiB)
TX 错误 0 丢弃 0 超限 0 载波 0 冲突 0eth2:flags=4163 mtu 1500
inet 192.168.1.233 网络掩码 255.255.255.0 广播 192.168.1.255
inet6 fe80::f816:3eff:fead:8432 prefixlen 64 scopeid 0x20
ether fa:16:3e:ad:84:32 txqueuelen 1000(以太网)
RX 数据包 6520 字节 396490(387.1 KiB)
RX 错误 0 丢弃 0 超限 0 帧 0
TX 数据包 51 字节 4973(4.8 KiB)
TX 错误 0 丢弃 0 超限 0 载波 0 冲突 0eth3:标志=4163 mtu 1500
inet 192.168.1.234 网络掩码 255.255.255.0 广播 192.168.1.255
inet6 fe80::f816:3eff:fe4a:8dc7 prefixlen 64 scopeid 0x20
ether fa:16:3e:4a:8d:c7 txqueuelen 1000(以太网)
RX 数据包 33438 字节 3106902(2.9 MiB)
RX 错误 0 丢弃 0 超限 0 帧 0
TX 数据包 26161 字节 16106821(15.3 MiB)
TX 错误 0 丢弃 0 超限 0 载波 0 冲突 0lo:标志=73 mtu 65536
inet 127.0.0.1 网络掩码 255.0.0.0
inet6 ::1 前缀长度 128 范围 ID 0x10
循环 txqueuelen 1(本地环回)
RX 数据包 1992 字节 199852(195.1 KiB)
RX 错误 0 丢弃 0 超限 0 帧 0
TX 数据包 1992 字节 199852(195.1 KiB)
TX 错误 0 丢弃 0 超限 0 载波 0 冲突 0
sudo httpd -S
VirtualHost 配置:
92.168.1.231:80 www.mydomain.com(/etc/httpd/conf.d/sites.conf:1)
ServerRoot:“/etc/httpd”
主 DocumentRoot:“/var/www/html”
主 ErrorLog:“/etc/httpd/logs/error_log”
互斥代理:using_defaults
互斥 authn-socache:using_defaults
互斥默认值:dir="/run/httpd/" mechanism=default
互斥 mpm-accept:using_defaults
互斥 authdigest-opaque:using_defaults
互斥代理平衡器 shm:using_defaults
互斥 rewrite-map:using_defaults
互斥 authdigest-client:using_defaults
PidFile:“/run/httpd/httpd.pid”
定义:DUMP_VHOSTS
定义:DUMP_RUN_CFG
用户:name="apache" id=48
组:name="apache" id=48
猫/etc/httpd/conf.d/sites.conf
<VirtualHost 92.168.1.231:80>
ServerName www.mydomain.com
ServerAlias mydomain.com
DocumentRoot "/var/www/mydomain/"
ErrorLog "/var/log/httpd/mydomain/error_log"
TransferLog "/var/log/httpd/mydomain/access_log"
</VirtualHost>
sudo netstat -pntl(当 httpd.conf 中监听 80 并且 Apache 正在运行时)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 1191/memcached
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1221/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2090/master
tcp6 0 0 :::3306 :::* LISTEN 1386/mysqld
tcp6 0 0 ::1:11211 :::* LISTEN 1191/memcached
tcp6 0 0 :::111 :::* LISTEN 1/systemd
tcp6 0 0 :::80 :::* LISTEN 8094/httpd
tcp6 0 0 :::22 :::* LISTEN 1221/sshd
tcp6 0 0 ::1:25 :::* LISTEN 2090/master
除了更改管理员电子邮件、从主文档根目录删除自动索引和设置服务器名称之外,httpd.conf 几乎是原始的。
答案1
在主服务器配置中您应该有:
Listen 80
这指示 apache 监听所有接口(因此监听所有 IP)。如果您不希望 apache 监听所有接口/IP,则只需更改它。
您的 VHost 应按如下方式配置:
<VirtualHost 192.168.1.231:80>
ServerName mydomain1.com
DocumentRoot /var/www/mydomain1
...
</VirtualHost>
<VirtualHost 192.168.1.232:80>
ServerName mydomain2.com
DocumentRoot /var/www/mydomain2
...
</VirtualHost>
还要检查您的本地 DNS 服务器或/etc/hosts
文件是否指向正确的 IP 地址。
答案2
我没有/etc/hosts
正确配置,但修复了这个问题也没用。我从基于 IP 的虚拟主机切换到基于域的虚拟主机,这个问题神奇地解决了。不知道为什么,但确实有效。