VirtualHost 在多个接口上失败

VirtualHost 在多个接口上失败

我有一个具有多个接口的实例,并且我正在尝试使用基于 IP 的虚拟主机配置 Apache 来服务多个网站,但由于某种原因,它只返回主文档根目录。

我跟着教程让多​​个接口正常工作。

怎么了:网站应该显示/var/www/mydomain/index.html,但却显示/var/www/html/index.html

我已尝试过:在 VirtualHost 中使用 *:80,虽然可行,但目标是让多个 VirtualHost 分别来自不同的 IP/接口。从 VirtualHost 中删除端口:没有任何作用。更改Listen 80Listen 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 冲突 0

eth1: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 冲突 0

eth2: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 冲突 0

eth3:标志=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 冲突 0

lo:标志=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 的虚拟主机切换到基于域的虚拟主机,这个问题神奇地解决了。不知道为什么,但确实有效。

相关内容