Apache 反向代理规则根据 URI 信息创建 HTTP 标头?

Apache 反向代理规则根据 URI 信息创建 HTTP 标头?

我正在测试一个托管在生产环境中的 Web 应用程序网站管理员,它对用户进行身份验证,并向每个请求添加一个可识别该用户的 HTTP 标头。

如果不存在标题,则应用程序将无法工作,我正在尝试使用Watir 和 Webdriver。此组合在本地驱动真实浏览器(例如 Firefox),因此我无法通过 WebDriver 轻松插入 HTTP 标头。我们的本地测试环境没有 SiteMinder,因此我需要一种插入标头的方法。

我已经将 Apache 2 设置为反向代理,并想要转换如下请求:

GET /[email protected]/application/index.html

进入:

GET /application/index.html
SM_USER: [email protected]

我们的服务器都是 Solaris 10,我目前正在使用与操作系统一起安装的 Apache/2.0.63(我们没有将它用于其他任何用途)。

我最接近的方法是使用SetEnvIfmod_rewrite

SetEnvIf Request_URI "SM_USER=([^/]+)" HTTP_SM_USER=$1
RewriteEngine on
RewriteRule ^/.+(/application/.+)$ http://apphost:9090$1 [P]

但未设置标头。似乎Request_URI正在重写的值SetEnvIf指令正在执行,因此SM_USER不再在 URI 中。

如果我是对的,是否可以更改执行顺序以SetEnvIf获取原始 URI?还是我需要采用其他方法?

答案1

我的同事想出了一个解决方案。我错误地认为SetEnvIf单独使用就足够了。现在这对我们有用:

RewriteEngine on
# Anything ending with /application/.+ goes to http://apphost:9090
RewriteRule ^/.+(/application/.+)$ http://apphost:9090$1 [P]
# Match SM_USER= in the URI and set an env var with its value.
SetEnvIf Request_URI "SM_USER=([^/]+)" SM_USER=$1
# If the env var is set, put the value into a request header.
RequestHeader set SM_USER "%{SM_USER}e" env=SM_USER

此 URIhttp://apphost:9090/application/index.html通过 HTTP 标头SM_USER设置为代理[email protected]

/[email protected]/application/index.html

相关内容