Получить IP-адрес клиента при использовании mode_proxy_wstunnel

Я использую mod_proxy_wstunnel на Apache 2.4.18, Итак, все запросы пересылаются с

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

в коде сервера WebSocket я использовал

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

получить IP-адрес клиента Но, IP-адрес всегда неожиданный, он показывает IP-адрес сервера, т.е. 10.22.22.12
Работает нормально без прокси. Итак, есть ли способ получить IP-адрес клиента вместо сервера при использовании mod_proxy_wstunnel?

3

Решение

Посмотрев заголовок соединения websocket, я нашел следующую строку.

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 содержит то, что я искал. но я не уверен, что это правильный путь для достижения цели. Я пойду на это, пока не найдется лучшее решение.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]