Mod-proxy 带有查询字符串替代吗?

Mod-proxy 带有查询字符串替代吗?

我目前正在尝试使用 mod_proxy 在另一台服务器上发出搜索请求。远程服务器请求必须按以下方式构建:

http://path.to.remote/search.php?key=MYKEY&term=SEARCHTERM

为了混淆我的访问密钥,我希望将身份验证包含在我的 vhost 定义中。由于密钥必须作为查询字符串值传递,我认为它会很简单:

ProxyPass /lookup/t/ http://path.to.remote/search.php?key=MYKEY&term=

我的 URL 看起来是这样的

http://localhost/lookup/t/term=SEARCHTERM

我很快发现 ProxyPass 会对目标 URL 执行强制字符转义,导致我的 URL 无法使用。我发现很多人都遇到过类似的问题,主要是之前编码的字符,而且使用 ProxyPass 进行 URL 编码是不可避免的。

我发现了一些建议,我应该使用 mod_rewrite 来为我组装代理请求,但我不确定该怎么做。我最终在 vhost 定义中得到了类似这样的规则:

RewriteEngine On
RewriteCond     %{REQUEST_URI}      !^/lookup/t/
RewriteRule ^/lookup/t/$ http://path.to.remote/search.php?key=MYKEY&term=$1

我对 mod_rewrite 的使用经验不多,而且我的正则表达式技能也不好,所以我希望有人能解释一下如何重写我的 URL 以及如何根据需要通过 mod_proxy 传输它。我认为我需要使用 rewrite 来组装查询字符串,如下所示,我的想法对吗:

Http://localhost/lookup/t/term=SEARCHTERM  
Http://localhost/lookup/t/?key=MYKEY&term=SEARCHTERM  

然后使用 mod proxy 从

/lookup/t/   

http://path.to.remote/search.php

答案1

我的怀疑被证明是正确的。我不得不用 mod_rewrite 修改查询字符串,然后将其代理到我的目的地。最后:

  1. 我启用了 mod_rewrite 和 mod_ssl
  2. 我在 vhost 定义中添加了 SSLProxyEngine 指令:
        SSLProxyEngine On
  3. 我打开了重写并在 vhost def 中添加了一条规则。我还打开了日志记录以进行调试。我了解到我无法重写目录的请求,因此我必须指向一个脚本。我还必须使用 QSA 和 P 选项:
        RewriteEngine On
        RewriteRule ^/lookup.php /lookup?key=MYKEY [QSA,P]

  4. 我设置了代理规则。由于查询字符串已构造,因此适用简单的代理规则:
        ProxyPass /lookuphttps://path.to.remote/search.php
        ProxyPassReverse /查找https://path.to.remote/search.php

  5. 别忘了重启 Apache!(我重启了)

  6. 我现在连接到http://localhost/lookup.php?term=SEACRHTERM

相关内容