我有一个具有 IP 地址的远程服务器10.72.254.248,我想在此服务器上设置多个虚拟主机,并为每个虚拟主机提供不同的端口。
我的httpd.conf:
Listen 80
Listen 3333
NameVirtualHost *:80
NameVirtualHost *:3333
<VirtualHost *:80>
DocumentRoot "/path/to/site1/"
ServerName *:80
</VirtualHost>
<VirtualHost *:3333>
DocumentRoot "/path/to/site2/"
ServerName *:3333
</VirtualHost>
如果没有指定端口,它将访问 site1(端口 80)。当我访问10.72.254.248或者10.72.254.248:80成功打开site1
但当我尝试10.72.254.248:3333它不起作用。
该问题与语法有关吗?或者可能与 /etc/hosts 文件有关?或者与防火墙有关?
请帮忙
编辑:
当我尝试连接到10.72.254.248:3333,我收到以下错误信息:
Can't connect to server 10.72.254.248:3333
答案1
检查 netstat -an 并确保 Apache 正在监听端口 3333。检查是否有其他程序正在监听。如果是,则很可能是防火墙问题(iptables -L 并查找允许端口 3333 的规则)。
答案2
首先:“它不起作用”并不是正确的错误描述。你期望看到什么?你实际观察到了什么?
话虽如此,您似乎混淆了基于名称的虚拟主机和基于 IP/端口的虚拟主机的概念。在第一种情况下(您实际上需要NameVirtualHost
andServerName
指令),您可以在同一个 IP/端口上拥有多个虚拟主机。Apache 通过将客户端随每个请求发送的 Host 标头的内容与虚拟主机的值进行比较来决定使用哪一个ServerName
。
在您的情况下,端口上只有一个虚拟主机,因此没有必要这样做。因此,您应该删除指令NameVirtualHost
和ServerName
指令(尽管格式错误)。
读http://httpd.apache.org/docs/2.2/vhosts/name-based.html有关基于名称的虚拟主机概念的更多信息。