![具有自动身份验证的 Apache mod_proxy](https://linux22.com/image/1394604/%E5%85%B7%E6%9C%89%E8%87%AA%E5%8A%A8%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81%E7%9A%84%20Apache%20mod_proxy.png)
ProxyPass
我正在通过指令为ProxyPassReverse
一些 URL在 apache 中设置代理:
ProxyPass /mypath http://myotherserver.com
ProxyPassReverse /mypath http://myotherserver.com
但是,myotherserver.com
需要 (基本) 身份验证。如果我什么都不做,此身份验证将传递给最终客户端。出于某种原因,我不想这样做,我想直接在我的 apache 配置中添加凭据。我该怎么做?我试过:
ProxyPass /mypath http://user:[email protected]
ProxyPassReverse /mypath http://user:[email protected]
但它似乎不起作用。提前感谢您的帮助。
答案1
我确实找到了解决方案。我希望它对其他人有用:
运行以下 Python 脚本来获取您的身份验证hash
:
import base64
hash = base64.b64encode(b'user:password')
在您的 apache 配置中添加以下指令:
<Location /mypath>
RequestHeader set Authorization "Basic $hash"
</Location>
其中$hash
被替换为之前计算的字符串。
确保mod_proxy
和mod_headers
可用(a2enmod proxy
和a2enmod headers
)。重新启动 apache2,您就完成了 :)
答案2
谢谢@ThR37 - 这更像是对您的回答的评论,但无法在那里格式化。:/
我需要用 mod_rewrite 来完成,但是使用了你的方法:
RewriteEngine On
SSLProxyEngine on
RewriteCond %{REQUEST_URI} ^/34506a81-1a6d-4596-beaf-580da9c98cca$
SetEnvIf REQUEST_URI "/34506a81-1a6d-4596-beaf-580da9c98cca" DOAUTH
RequestHeader set Authorization "Basic dXNlcjpwYXNzd29yZA==" env=DOAUTH
RewriteRule /34506a81-1a6d-4596-beaf-580da9c98cca https://www.example.com/my/path [P,L]
ProxyPassReverse /34506a81-1a6d-4596-beaf-580da9c98cca https://www.example.com/my/path