我有一个重写规则,用于从远程 URL(在我控制下的不同服务器上)获取一些数据,如下所示:
RewriteRule ^/.+/remote_dir/(.*) http://11.22.33.44/remote_dir/$1 [P]
远程服务器有 htpasswd 身份验证,需要绕过此特定请求。我无法使用允许来自 ip,因为记录的 ip 是网关的(这将允许无密码访问网关后面的所有机器)。
因此我想到通过这个请求传递环境变量,并根据它的值绕过身份验证(11.22.33.44 也在 apache 上)。
但我似乎找不到这个问题的解决方案。我知道还有其他解决方案,比如在两台服务器上使用通用 ldap auth/或相同的用户/密码,但我不想使用它,因为 11.22.33.44 位于公共 IP(云基础设施)上。
请帮我解决这个问题。
答案1
您无法通过 HTTP 传递环境变量。您是否尝试过使用 URL 中的身份验证令牌进行代理:
RewriteRule ^/.+/remote_dir/(.*) http://user:[email protected]/remote_dir/$1 [P]
或者,您可以将身份验证令牌附加到查询字符串,例如:
RewriteRule ^/.+/remote_dir/(.*\?.*)$ \
http://11.22.33.44/remote_dir/$1;auth=s3cr3t [P,S=1]
RewriteRule ^/.+/remote_dir/(.*) \
http://11.22.33.44/remote_dir/$1?auth=s3cr3t [P]
然而,HTTP 身份验证(即使是摘要模式)也并不完全安全。