我有几个网站,都设置了http-vhosts.conf
各自的ServerName
和DocumentRoot
,它们运行良好。
但当我访问服务器的 IP 地址 URL 时,我得到的是第一的虚拟主机,而不是我期望的 Apache 服务,文件http.conf
的DocumentRoot
。
如何配置 Apache,以便通过 IP 地址(无论是外部还是环回)访问服务器不是返回第一个 VirtualHost?
这是第一个 VirtualHost,如果我通过 IP 访问 Web 服务器,它将作为响应返回:
<VirtualHost *:80>
ServerName "delaneatallent.com"
ServerAlias "www.delaneatallent.com"
DocumentRoot "/Library/WebServer/Documents/delanea"
</VirtualHost>
如果重要的话,请在 OS X 上使用 Apache 2.2.14。
:wq
答案1
简而言之,您不能 - 这就是 Apache 的工作方式。如果您正在监听该 IP(根据 Prix 的评论),那么 Apache 将在处理 IP 请求时使用定义的第一个虚拟主机。
如果这是不可取的,那么请考虑将第一个虚拟主机更改为您实际想要的(如果是通过 IP 提供的)。如果这不是您想要的,那么请考虑将重定向设置为第一个虚拟主机,使其转到您想要的地方。
# default
<VirtualHost *:80>
RewriteEngine on
RewriteRule ^/(.*) http://othersite.com/$1 [L,R]
</VirtualHost>
您无法阻止 Apache 监听该 IP,但只要稍加创意,您就可以让它执行其他您想做的事情。
答案2
我为解决这个问题所做的就是创建一个默认页面,/var/www
当您通过 IP 或与我的服务器上的站点相关的未知 URL 导航到我的服务器时,您将看到该默认页面。
我托管的实际站点位于具有默认站点配置的 sites-enabled 文件夹中,所有站点均基于名称并指向不同的目录。
长话短说,通过 IP 导航到我的服务器,您会得到默认的错误页面。
答案3
此外这个答案。
你可以重定向请求到不存在的 IP。在这种情况下,浏览器将表现得好像这样的服务器不存在:
<VirtualHost *:80>
RewriteEngine on
RewriteRule ^/(.*) http://1.2.3.4/ [L,R]
</VirtualHost>
但通过查看标头,你可以看到请求的去向:
my@pc:~$ wget ***.***.***.***
--2021-11-12 15:47:42-- http://***.***.***.***/
Connecting to ***.***.***.***:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://1.2.3.4/ [following]
--2021-11-12 15:47:42-- https://1.2.3.4/
Connecting to 1.2.3.4:443...
答案4
为了使你的 apache 监听特定的 ip 和端口,你必须定义它:
Listen 10.0.0.1:80
Listen 20.0.0.1:80
其中 20.0.0.1 和 10.0.0.1 是我分配给它的 2 个示例 IP。
如果您已经Listen
配置了其他内容,则可能需要进行更改,例如:
Listen 0.0.0.0:80
将使你的 apache 监听所有可用的接口。