Answers:
感谢您提供其他答案。我通过添加没有任何权限的默认虚拟主机解决了该问题。全局DocumentRoot
和ServerName
选项必须与虚拟主机中指定的选项匹配。
/etc/httpd/conf/httpd.conf
...
ServerName <server-ip>:80
DocumentRoot "/var/www/html"
<Directory />
Order Deny,Allow
Deny from all
Options None
AllowOverride None
</Directory>
...
/etc/httpd/conf.d/default.conf
<VirtualHost *:80>
ServerName <server-ip>
DocumentRoot /var/www/html
</VirtualHost>
这样,当通过服务器的ip直接访问服务器时,我收到403禁止消息,这正是我想要的。如果我不需要/var/www/html
现有目录,那就更好了,但是如果我指定类似的东西,Apache会抱怨/dev/null
。
是和否
您可以注释掉或删除该DocumentRoot
指令,没问题。但这并没有太大的用处,因为PREFIX/htdocs/
在构建apache时,它将默认为设置PREFIX 的默认目录。
当您设置了VirtualHosts后,所有未由显式配置的虚拟主机处理的请求都将由默认虚拟主机(通常是第一个,但httpd -S
会告诉您)处理。
带扩展任何Apache配置文件.conf
位于内/etc/httpd/conf.d/
将作为Apache配置的一部分。因此,要禁用默认的“欢迎”页面配置,我们需要重命名其配置/etc/httpd/conf.d/welcome.conf:
第一步移动默认欢迎文件:
sudo mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.backup
第二步重新启动Appache2服务
sudo systemctl restart httpd
在/etc/httpd/conf/httpd.conf中,如果您的Listen指令是
Listen 80
这意味着
*:80
您已经在/etc/httpd/conf/httpd.conf和/etc/httpd/conf.d/default.conf中定义了一对<listener>
+ <servename>
,它们是相同的:*:80
+ <server-ip>
。因此,Apache仅考虑一个因素。
因此,您的vhost配置没有用。
您的/etc/httpd/conf/httpd.conf足以阻止对/ var / www / html目录的访问。
只需添加:
<Directory /var/www/html>
Order Deny,Allow
Deny from all
Options None
AllowOverride None
</Directory>
请阅读https://httpd.apache.org/docs/2.4/en/vhosts/name-based.html#alg:
服务器如何选择适当的基于名称的虚拟主机
必须认识到,基于名称的虚拟主机解析的第一步是基于IP的解析。基于名称的虚拟主机解析仅在将候选范围缩小到基于IP的最佳匹配之后才选择最合适的基于名称的虚拟主机。在所有VirtualHost指令中对IP地址使用通配符(*),使基于IP的映射无关紧要。
当请求到达时,服务器将根据请求使用的IP地址和端口找到最佳(最特定)匹配参数。如果有多个包含此最佳匹配地址和端口组合的虚拟主机,则Apache将进一步比较ServerName和ServerAlias指令与请求中存在的服务器名称。
如果从任何基于名称的虚拟主机中省略ServerName指令,则服务器将默认为从系统主机名派生的标准域名(FQDN)。隐式设置的服务器名称可能导致虚拟主机匹配违反直觉的行为,因此不建议使用。
IP和端口组合的默认基于名称的虚拟主机如果在包含最特定的匹配IP地址和端口组合的虚拟主机集中未找到匹配的ServerName或ServerAlias,则将使用第一个列出的与之匹配的虚拟主机。
只需将默认端口更改为:
Listen 80
Listen 8080 # any fake port
并将* .80留在VirtualHost中
适用于Apache2和Centos 7
您可以在文档中找到更多示例。看一下_default_变量。
为了禁用此页面,我们必须将文件/etc/httpd/conf.d/welcome.conf重命名为其他名称,或者如果不需要它可以将其删除。
mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf_backup
确保使用以下命令重新启动Apache(以root用户身份):
systemctl重新启动httpd