首页 > 解决方案 > apache2 忽略默认主机并始终重定向到域,即使使用 IP

问题描述

当用户通过 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.com并按https://example.com预期行事。 http://1.2.3.4:80/意外重定向到https://example.com.

标签: apache2vhosts

解决方案


您应该避免<virtualhost *>哪些金额<virtualhost *:*>确实非常不寻常。从任何虚拟主机中省略 ServerName 也是一个坏主意,因为它将从系统主机名中提取并导致混乱。

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

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


推荐阅读