3

ラチェット websocket を使用して websocket アプリケーションをセットアップしています。私のセットアップは次のとおりです。私は(する必要があります)nginxサーバーをリバースプロキシとして使用し、Websocketラチェットサーバーにリクエストを転送します:

    location /websocket {
        proxy_pass http://websocket;
        proxy_http_version 1.1;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_redirect off;
    }

私の websocket アプリ内で、IP フィルタリングのために X-Real-IP の値 ($remote_addr) を取得する必要があります。このプロキシ ソリューションを使用する必要があるため、関数 stream_socket_get_name を使用すると、リモート IP として常に IP 127.0.0.1 を取得します。

私が調査した限り、この問題のラチェットは stream_socket_server を開始し、着信接続のリッスンを開始します。これらの接続はすでにストリームであり、http 要求ではないため、$_SERVER などを使用することはできません。

この値を取得する方法を知っている人はいますか?

よろしく

マーカス

4

2 に答える 2

1

メソッドで渡される各 ConnectionInterface オブジェクトにはon、最初のリクエストからの HTTP ヘッダーを持つ Guzzle RequestInterface オブジェクトが含まれています。

$conn->WebSocket->request->getHeader('X-Real-IP');
于 2014-02-21T03:39:01.107 に答える