gpt4 book ai didi

apache - VirtualHosts ONLY 没有默认值?

转载 作者:行者123 更新时间:2023-12-04 18:06:50 26 4
gpt4 key购买 nike

我有一个带有 Apache 的 debian 设置。我禁用了“默认”站点并暂时添加了一个站点。

我想禁止访问除各种虚拟主机下的所有内容

<VirtualHost *:80>
DocumentRoot /var/www/mycompany/websites/corporate
<Directory /var/www/mycompany/websites/corporate>
Order deny,allow
Allow from all
Options FollowSymLinks
</Directory>
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /var/www/mycompany/websites/leisure
<Directory /var/www/mycompany/websites/leisure>
Order deny,allow
Allow from all
Options FollowSymLinks
</Directory>
</VirtualHost>

这没有效果。问题是当我通过 IP 地址访问网络服务器时,默认脚本运行,这是不需要的。我希望 IP 地址显示自定义 404 或其他内容。

编辑 |我重新启用了“默认”站点,希望能阻止所有访问——当然不包括每个虚拟主机及其文档根目录和子目录。

我将如何实现这个目标???

最佳答案

您的虚拟主机缺少 ServerName这将允许 HTTP request hostname<->Virtualhost映射。

所以,首先,添加右Servername在虚拟主机上。

然后,如果您希望所有其他名称呈现 404,您绝对需要一个默认的虚拟主机。此默认虚拟主机将捕获在 HTTP 请求中使用无法识别的主机 header 的任何请求(因此基于 IP 的访问,或与您的 IP 关联的其他 DNS,或伪造的主机 header )。

默认的 Virtualhost 是 apache 配置中第一个加载的,在类 debian 系统中,包含的文件以 00 为前缀并且包含的​​目录按字母顺序加载以强制执行此状态。您始终可以使用 -S 选项检查哪个虚拟主机是默认虚拟主机。

# debian-like
apachectl -S
# redhat like
httpd -S

然后,如果您希望对默认 Virtualhost 的所有这些访问都呈现 404,您只需要使此 Virtualhost 变得非常简单(删除所有默认废话总是一个好主意)并为所有内容提供 404 响应:

<Virtualhost *:80>
ServerName _default
# do not set that docroot as a parent of real doc root
# you do not want to let access to /var/www/mycompany as /company
# so create that directory
DocumentRoot /var/www/default
ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/access-default.log combined
<Directory />
Options FollowSymLinks
AllowOverride None
# apache<2.3 syntax
Order allow,deny
allow from all
</Directory>

# Now catch everything and throw a 404
# you'll need mod_alias for that (usually already there)
RedirectMatch 404 ^(.*)

</Virtualhost>

这并不是针对 HTTP 请求主机 header 操纵的绝对保护(它们仍然是将您的 Virtualhost 与绝对 URI 和伪造的主机 header 相匹配的奇怪方法)但这是一个很好的开始。

如果你想确保到达你的虚拟主机的 HTTP 请求的主机头是虚拟主机中定义的(并且只有那个)你可以在最终的虚拟主机上添加一个 mod_rewrite 检查。

所以在你的例子中,对于目录 leisure ,假设 ServerName应该是 www.leisure.com .在Directory我会添加这个:

<Directory /var/www/mycompany/websites/leisure>
Order deny,allow
Allow from all
Options FollowSymLinks
# not the right domain? -> 403
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.leisure\.com [NC]
RewriteRule .* - [F,L]
</Directory>

关于apache - VirtualHosts ONLY 没有默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24661687/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com