Apache 从服务器主机名提供基于名称的虚拟主机(但不应该)
Posted
技术标签:
【中文标题】Apache 从服务器主机名提供基于名称的虚拟主机(但不应该)【英文标题】:Apache serving name-based virtual Host from server hostname (but shouldn't be) 【发布时间】:2018-09-08 00:14:09 【问题描述】:我有一个在 Centos 上运行的 Apache httpd 服务器(2.4.6),为多个基于名称的虚拟主机提供服务。服务器的 fqdn / 主机名应该不提供任何内容,但它重定向到基于名称的虚拟主机之一,我不明白为什么或如何停止它。
在下面的配置中,对http://host.mydomain.org/ 的请求被重定向到http://www.customer.co.uk/。
任何关于为什么的想法,以及阻止它的正确方法。
我的 httpd.conf 是:
ServerRoot "/etc/httpd"
Listen 80
Include conf.modules.d/*.conf
User apache
Group apache
ServerAdmin root@xxx.org
ServerName host.mydomain.org:80
<Directory />
AllowOverride none
Require all denied
</Directory>
DocumentRoot "/var/www/html"
<Directory "/var/www">
AllowOverride None
Require all denied
</Directory>
<Directory "/var/www/html">
Options None
AllowOverride None
Require all denied
</Directory>
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
<Files ".ht*">
Require all denied
</Files>
ErrorLog "logs/error_log"
LogLevel warn
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%Refereri\" \"%User-Agenti\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
# You need to enable mod_logio.c to use %I and %O
LogFormat "%h %l %u %t \"%r\" %>s %b \"%Refereri\" \"%User-Agenti\" %I %O" combinedio
</IfModule>
CustomLog "logs/access_log" combined
</IfModule>
<IfModule alias_module>
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>
<Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Require all denied
</Directory>
<IfModule mime_module>
TypesConfig /etc/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddHandler cgi-script .cgi
AddHandler cgi-script .pl
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
</IfModule>
AddDefaultCharset ISO-8859-1
<IfModule mime_magic_module>
MIMEMagicFile conf/magic
</IfModule>
EnableSendfile on
TraceEnable Off
ServerTokens Prod
IncludeOptional conf.d/*.conf
一个示例虚拟主机是:
<VirtualHost *:80>
DocumentRoot /home/xxx/customer/docs
ServerName www.customer.co.uk
ErrorLog /home/xxx/customer/logs/error_log
CustomLog /home/xxx/customer/logs/access_log combined
<Directory /home/xxx/customer/docs>
AllowOverride None
Options None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName customer.co.uk
Redirect permanent / http://www.customer.co.uk/
</VirtualHost>
<VirtualHost *:80>
ServerName www.customer.mydomain.org
Redirect permanent / http://www.customer.co.uk/
</VirtualHost>
非常感谢 凯文
【问题讨论】:
您确定您的机器中没有设置任何 IPTABLES 或 /etc/hosts 用于重定向 host.mydomain.org 或它的 IP 吗?或者另一个机会是它可能是从您的代理服务器转发的。所以请确保httpd服务器停止时它没有转发。 你在测试什么?浏览器应该将Redirect permanent
存储一段未指定的时间,wget
或curl
更适合查找重定向问题。
您的配置中有三个<VirtualHost *:80>
标签,这不是必需的。您可以将所有内容写入 virtualHost 标签内,就像它在单个标签中一样。
【参考方案1】:
配置文件中的第一个 VirtualHost 具有最高优先级,可以看作是默认或主服务器。这意味着如果收到的请求与指定的 ServerName
或 ServerAlias
指令之一不匹配,它将由第一个 <VirtualHost>
提供服务。
您可以通过添加这个(例如)作为第一个虚拟主机来防止这种情况:
<VirtualHost *:80>
ServerName default
RewriteEngine On
RewriteRule ^ - [F]
</VirtualHost>
【讨论】:
以上是关于Apache 从服务器主机名提供基于名称的虚拟主机(但不应该)的主要内容,如果未能解决你的问题,请参考以下文章
apache 虚拟主机(EAI 2)名称或服务未知:AH00547:无法解析主机名