apache2 忽略默认主机并始终重定向到域,即使使用 IP

Posted

技术标签:

【中文标题】apache2 忽略默认主机并始终重定向到域,即使使用 IP【英文标题】:apache2 ignoring the default host and always redirecting to domain, even when using the IP 【发布时间】:2021-08-06 00:23:02 【问题描述】:

当用户通过 IP 地址访问我的服务器时,我试图让 apache2 使用默认站点,而不是输入站点的域,只是为了告诉用户他不能直接访问该 ip。

发生的情况是它不断重定向到域的站点,覆盖浏览器中的 IP 地址,而不是显示默认站点。

请注意,域的站点被重定向到 https,这是预期的。 默认站点根本不使用ssl,最好不要使用ssl。

我的站点配置如下(没有日志记录、错误文档或 ssl 路径指令): 000-default.conf

<VirtualHost *>
    DocumentRoot /var/www/html
</VirtualHost>

example.com.conf

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /home/example.com/www
    Redirect permanent / https://example.com
</VirtualHost>

example.com-ssl.conf

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /home/example.com/www

    Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

所有这些站点都已启用,并且 apache2 已重新启动。

> $ sudo apache2ctl -S
VirtualHost configuration:
*:*                    1.2.3.4 (/etc/apache2/sites-enabled/000-default.conf:1)
*:443                  example.com (/etc/apache2/sites-enabled/example.com-ssl.conf:2)
*:80                   example.com (/etc/apache2/sites-enabled/example.com.conf:1)
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex watchdog-callback: using_defaults
Mutex rewrite-map: using_defaults
Mutex ssl-stapling-refresh: using_defaults
Mutex ssl-stapling: using_defaults
Mutex ssl-cache: using_defaults
Mutex default: dir="/var/run/apache2/" mechanism=default
Mutex mpm-accept: using_defaults
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33
Group: name="www-data" id=33

http://example.comhttps://example.com 的行为符合预期。 http://1.2.3.4:80/ 意外重定向到 https://example.com

【问题讨论】:

【参考方案1】:

你应该避免&lt;virtualhost *&gt; 等于&lt;virtualhost *:*&gt; 这真的很不寻常。从任何虚拟主机中省略 ServerName 也是一个坏主意,因为它将从系统主机名中提取并导致混淆。

Apache 首先选择最匹配的 IP:PORT 组合,然后从最匹配的虚拟主机集中查看 ServerName/ServerAlias。

这就是选择您的*:80 虚拟主机的原因——这是一个更具体的匹配。

【讨论】:

谢谢,这似乎是原因。我见过无数使用&lt;virtualhost *&gt; 设置默认值的例子。

以上是关于apache2 忽略默认主机并始终重定向到域,即使使用 IP的主要内容,如果未能解决你的问题,请参考以下文章

将流量重定向到域

Apache 2.4 虚拟主机被忽略

将 IP 重定向到域

Apache2不断重定向到默认页面

Apache 2.4 将本地虚拟主机重定向到 https 而不是 http

从 IP 地址重定向到域