如何让 Apache 不响应仅 IP 请求?

如何让 Apache 不响应仅 IP 请求?

我有几个网站,都设置了http-vhosts.conf各自的ServerNameDocumentRoot,它们运行良好。

但当我访问服务器的 IP 地址 URL 时,我得到的是第一的虚拟主机,而不是我期望的 Apache 服务,文件http.confDocumentRoot

如何配置 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 监听所有可用的接口。

相关内容