Websocket: Workerman + Nginx反代 下如何获取用户的IP

2d_gate

通过 $connection->getRemoteIp() 所获取的 IP 都是 127.0.0.1

trace 了一下代码发现 workerman 貌似最初是由以下方式获取的
$new_socket = @stream_socket_accept($socket, 0, $remote_address);
网上找了下关于 stream_socket_accept 的信息但无果...

以下是 Nginx Conf:

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://(..被误判为站外连结..)127.0.0.1:2346;
        proxy_read_timeout 365d;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
6788 1 1
1个回答

walkor

proxy_set_header X-Real-IP $remote_addr;

你的代理上有这段,那么workerman可以通过读取
$_SERVER来获得客户端ip。

  • 2d_gate 2016-09-05

    假设某个瞬间有很多用户向 Websocket 发起连线,在 worker 的 onConnect 回调中记下的 $_SERVER['HTTP-X-REAL-IP'] 有可能会是错误(被其他用户的值给覆盖)的吗?

  • walkor 2016-09-05

    不会

  • 2d_gate 2016-09-05

    @1:thank you!

年代过于久远,无法发表回答
🔝