配置Apache反向代理时如何移除URL中的用户凭证再转发
解决方案
需要调整的配置项如下:
- 先修正原有配置的笔误:
Require valid-use修正为Require valid-user,否则认证逻辑会触发500错误 - 新增
RequestHeader unset Authorization配置,清除用户请求携带的原始认证头,放在自定义认证头配置之前 - 补充
ProxyPassReverse配置,修正后端返回的重定向地址指向代理服务而非后端本地服务 - 如果你不需要向后端传递任何固定的Basic Auth凭证,直接删除
RequestHeader set Authorization "Basic base64userpass"这行即可
修正后的完整配置示例:
<VirtualHost *:80> ServerAdmin webmaster@localhost ProxyRequests off <Location /> AuthType Basic AuthName "namex" AuthUserFile /etc/apache2/.htpasswd Require valid-user ProxyPass http://localhost:8000/ ProxyPassReverse http://localhost:8000/ Order allow,deny Allow from all # 先清空用户原始的认证信息 RequestHeader unset Authorization # 如果不需要向后端传固定认证,删掉下面这行即可 RequestHeader set Authorization "Basic base64userpass" </Location> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
补充说明
浏览器请求http://user:password@my-host.com时,会自动将URL中的凭证提取转换为Authorization请求头,不会在请求路径中携带该部分内容,因此清空请求头即可完全避免用户凭证被传递到后端服务。
如果配置重载时报Invalid command 'RequestHeader'错误,执行a2enmod headers启用请求头修改模块后再重载服务即可。配置修改完成后执行systemctl reload apache2(Debian/Ubuntu系)或systemctl reload httpd(CentOS/RHEL系)生效。
内容的提问来源于stack exchange,提问作者nugluke
相关产品推荐
相关产品推荐

