如何解决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
。
解决方法
您应该避免<virtualhost *>
,这相当于<virtualhost *:*>
,这真的很不寻常。从任何虚拟主机中省略 ServerName 也是一个坏主意,因为它会从系统主机名中删除并导致混淆。
Apache 首先选择最匹配的 IP:PORT 组合,然后从最匹配的虚拟主机集中查看 ServerName/ServerAlias。
这就是选择您的 *:80
虚拟主机的原因 -- 这是一个更具体的匹配。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。