关闭单个目录的 Apache 基本身份验证

在设置临时站点或类似站点时,我经常添加一个简单的 Apache 身份验证检查,以阻止每个人查看站点。这对于阻止搜索引擎蜘蛛访问带有测试内容的站点也很有用,这通常会导致问题。它不是非常安全,但它几乎让所有人都远离。

设置基本的 Apache 密码检查并不困难,只需要几行 Apache 配置即可。这可以放在 web 目录或服务器配置中的 .htaccess 文件中。以下配置设置了一个非常简单的身份验证屏障。

AuthName "Restricted Area"
AuthType Basic
AuthUserFile /var/www/passwords/.htpasswd
AuthGroupFile /dev/null
Require valid-user

上例中的 .htpasswd 文件是存储您的用户信息的地方,因此通常最好将其保存在您的 webroot 之外。.htpasswd 文件可以手动编辑,但添加密码最简单的方法是使用 htpasswd 命令,这将提示输入密码。

htpasswd .htpasswd <username>

完成所有这些设置后,您可能会发现需要允许访问某个目录。这可能是为了测试传入的 API 连接到服务器,否则会被阻止。要允许访问单个目录,您需要创建一个额外的 .htaccess 文件并添加Satify Any配置选项。这将告诉 Apache 允许任何用户访问该目录,从而绕过密码控制。

Satisfy Any

您不需要使用 .htaccess 文件来以这种方式控制目录访问。整个事情可以从主要的 Apache Web 配置或通过虚拟主机配置进行控制。在 Apache 配置文件中,以下配置可用于限制对目录/var/www/protected 中站点的访问。

<Directory /var/www/protected/>
  AuthName "Restricted Area"
  AuthType Basic
  AuthUserFile /var/www/passwords/.htpasswd
  AuthGroupFile /dev/null
  Require valid-user
</Directory>

通过添加额外的目录声明并包括像这样的满足任何选项,可以取消对单个目录的保护。

<Directory /var/www/protected/unprotected>
  Satisfy Any
</Directory>

我应该提到这是基本身份验证,因此并不完全安全,但它在阻止大多数用户和服务器访问网站方面做得很好。没有使用复杂的蛮力检查机制或密码加密技术。此外,如果您不在服务器上使用 SSL,则可以拦截和提取用户名和密码。