【问题标题】:Rerouting HTTP request from PHP back to Apache将 HTTP 请求从 PHP 重新路由回 Apache
【发布时间】:2013-10-25 13:22:15
【问题描述】:

我们的任务是通过 apache 反向代理上的参数检查 URL 的完整性。其中一个是从其他 3 个计算得出的哈希值。如果 URL 看起来完好无损,则应该启动反向代理功能。我们的问题是 在检查回 apache 后,我们不知道如何从 php 重新路由请求,因此它将继续/重新开始处理它。

我们尝试使用 file_get_contents() 开始一个新请求,但这不能很好地处理重定向并等待超时。

最好不要在 php 中重新实现反向代理,而是让 apache 执行此操作。 我们的哈希检查如下所示:

<?php
    $ss=$_SERVER['QUERY_STRING'];
    parse_str($ss,$qa);
    if (array_key_exists('hash', $qa)&&array_key_exists('id1', $qa)&&array_key_exists('id2', $qa)&&array_key_exists('id3', $qa)) {
        $hstr=$qa['id1'].$qa['id2'].$qa['id3'];
        $hash=hash_hmac('md5',$hstr, '@#$%^&**&^@ key !@^&*&T^%$');
        if ($qa['hash']==$hash) {

在这里我们应该做一些事情,以便 php 将请求传递回 apache 进程队列。

提前致谢!

【问题讨论】:

  • 澄清一下,一旦 PHP 检查了给定的 URL,您是否希望客户端直接访问该 URL?这可以通过header('Location: ...'); 来实现,以便将客户端浏览器重定向到该 URL?
  • 不,不应该在没有哈希的情况下访问该服务,因此在检查后我们需要反向代理功能。
  • 据我所知,没有办法执行 PHP/CGI 脚本,然后将请求传递回 Apache 以使用其代理模块进行处理。在此设置中,PHP 本身充当授权代理和反向代理。

标签: php apache http proxy reverse-proxy


【解决方案1】:

解决方案是 Apache 的 URL 重写模块 (mod_rewrite)。这可以将 URL 传递给外部程序来重写它,然后有条件地做一些事情。例如:

RewriteEngine on
RewriteMap hash prg:/var/www/html/url.php
RewriteCond ${hash:%{QUERY_STRING}} !^.*hashis=bad$ [nocase]
RewriteRule ^/something/(.*)$ http://proxied.server:1234/$1 [proxy]
RewriteRule ^.*$ http://some.default.page [proxy]

程序应该等待标准输入上的 URL 并将修改后的 URL 写入标准输出,只要确保你在末尾放了一个 \n。 在模块的文档中查找更多详细信息。

【讨论】:

    猜你喜欢
    • 2011-11-17
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 2018-08-07
    • 2017-02-21
    • 1970-01-01
    • 2013-03-11
    相关资源
    最近更新 更多