【问题标题】:Get client IP while using mode_proxy_wstunnel使用 mode_proxy_wstunnel 时获取客户端 IP
【发布时间】:2016-01-24 08:55:11
【问题描述】:

我在Apache 2.4.18 上使用mod_proxy_wstunnel。所以,所有的请求都是从

wss://url.com ==> ws://10.22.22.12:12345

在WebSocket服务器代码中,我使用了

socket_getpeername($client, $clientIP);
echo $clientIP;

获取客户端IP地址但是,IP总是出乎意料的,它显示了服务器的IP,即:10.22.22.12 它可以在没有代理的情况下正常工作。那么,有没有办法在使用mod_proxy_wstunnel时获取客户端的IP而不是服务器的IP?

【问题讨论】:

    标签: php apache websocket mod-proxy


    【解决方案1】:

    查看websocket连接的header后,发现如下字符串。

    GET / HTTP/1.1
    Host: 145.24.35.40:12345
    Pragma: no-cache
    Cache-Control: no-cache
    Origin: https://www.domain.com
    Sec-WebSocket-Version: 13
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36
    Accept-Encoding: gzip, deflate, sdch
    Accept-Language: en-US,en;q=0.8,id;q=0.6
    Cookie: __zlcmid=Y7fAKwRoP7ssZA; _ga=GA1.2.259560791.1452107273
    Sec-WebSocket-Key: w8Mp2n2lp6R5vnYaeEWsPw==
    Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
    X-Forwarded-For: 22.22.22.22       <<=== Your IP
    X-Forwarded-Host: ws.domain.com
    X-Forwarded-Server: ws.domain.com
    Upgrade: WebSocket
    Connection: Upgrade
    

    X-Forwarded-For 包含我正在寻找的内容。但我不确定它是否是实现目标的正确方法。我会继续努力,直到有更好的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-13
      • 2011-02-24
      • 2016-03-31
      • 2020-12-08
      • 1970-01-01
      • 2021-07-07
      • 2013-05-09
      • 2020-10-12
      相关资源
      最近更新 更多