我有一个 Apache2 反向代理来管理多个域。
在里面我有一个配置如下的 vHost:
<VirtualHost *:443>
RewriteEngine On
ServerName www.example.com
DocumentRoot /var/lib/letsencrypt/http_challenges
ProxyPass / http://10.55.0.180/plugin/main/
ProxyPassReverse / http://10.55.0.180/plugin/main/
ProxyRequests Off
ProxyPreserveHost On
<Directory /var/lib/letsencrypt/http_challenges>
Allow from All
</Directory>
<Location /Cours/index.php/Stats/>
AuthType Basic
AuthName "Wrapper auth"
AuthBasicProvider file
AuthUserFile "/etc/.htpasswd"
Require valid-user
</Location>
这样做的目的是,访问的用户https://www.example.com
无需输入密码即可进行访问,而访问者https://www.example.com/Cours/index.php/Stats/
必须经过身份验证才能进行访问。
当然,如果我在那里,这个办法就不管用了。
该文件存在且配置良好,但人们无需输入密码/etc/.htpasswd
即可访问。https://www.example.com/Cours/index.php/Stats/
答案1
这比我想象的要简单。我的问题是位置末尾的斜杠,因为它会在浏览器中的 URL 末尾自动删除。因此,这是有效的配置:
<VirtualHost *:443>
RewriteEngine On
ServerName www.example.com
DocumentRoot /var/lib/letsencrypt/http_challenges
ProxyPass / http://10.55.0.180/plugin/main/
ProxyPassReverse / http://10.55.0.180/plugin/main/
ProxyRequests Off
ProxyPreserveHost On
<Directory /var/lib/letsencrypt/http_challenges>
Allow from All
</Directory>
<Location /Cours/index.php/Stats>
AuthType Basic
AuthName "Wrapper auth"
AuthBasicProvider file
AuthUserFile "/etc/.htpasswd"
Require valid-user
</Location>