【问题标题】:How to make Apache copy certain requests to another webserver?如何让 Apache 将某些请求复制到另一个网络服务器?
【发布时间】:2014-04-29 02:46:28
【问题描述】:

我有一个繁忙的 web 服务器运行 apache。现在我对某些请求感兴趣,例如:

http://myserver1/path1/somepage1.html?xxxxxx
http://myserver1/path2/somepage2.html?xxxxxx

我想要做的是复制这样的请求并将它们转发到另一个网络服务器,例如:

http://myserver2/request_statistic/

但是原始请求必须像现在一样在 myserver1 上提供。 myserver2 仅用于研究目的,因此我希望重复的请求标头和正文与原始请求头和正文一样。

这可以吗?怎么样?

谢谢。

【问题讨论】:

    标签: apache http networking httprequest traffic


    【解决方案1】:

    响应会去哪里?

    您可以尝试查看 mod_security,它有许多有用的功能......您的目标是安全/取证,还是性能分析?

    对于性能分析,我发现过去创建更全面的日志记录格式更有用,该格式可以捕获响应代码、响应位置标头(用于跟踪重定向)、选定的请求标头、时间信息等。

    如果不使用 https,那么由数据包捕获驱动的东西可能会更好地为您服务。我知道 Oracle 真实用户信息 (?) (RUI) 使用该原理工作。对于更随意的诊断会话,我经常使用以下 tcpdump:

    tcpdump -s0 -A -p -nn tcp and port 80
    

    这足以获得完整的请求(和响应),它有点乱,但数据都在那里。您可以使用脚本对其进行一些清理,例如以下 (tcpdump-http-headers-only) - 它并不完美(尤其是在繁忙的服务器上,事情变得难以跟踪)。

    #!/bin/bash
    #
    # Pass in the output of 'tcpdump -s0 -A ...' to this and it will
    # output only the HTTP request headers and response headers.
    #
    # Cameron Kerr <cameron.kerr.nz@gmail.com>
    # 2013-02-14
    #
    grep --line-buffered -o \
            -e $'GET .*\r' \
            -e $'POST .*\r' \
            -e $'^[A-Z][A-Za-z0-9_-]*: .*\r' \
            -e $'HTTP/1.1 .*\r' \
            -e $'^\r$' \
      | sed --unbuffered -e 's,\r$,,'
    

    或者,您可能希望捕获它们(可能与 -W、-C 或 -G 选项结合使用)以供以后分析。如果提供了密钥(对 Wireshark 很有用),这也可以用于 https 连接,具体取决于所使用的密码。

    【讨论】:

    • 我还没有考虑过响应问题,也许在某个阶段放弃它?我们正在使用请求数据来挖掘用户行为,我们希望尽量减少对现有系统的修改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 2010-09-12
    相关资源
    最近更新 更多