Php nginx代理转发和流\u套接字\u获取\u名称

Php nginx代理转发和流\u套接字\u获取\u名称,php,nginx,websocket,Php,Nginx,Websocket,如何使stream\u socket\u get\u name从远程客户端返回真实的IP地址 $ip = stream_socket_get_name($socket, true); 上面的返回类似于127.0.0.1:39872 nginx 问题是stream\u socket\u get\u name()对文件句柄进行操作。在这种情况下,文件句柄始终连接到代理,因此只能获取代理信息。但是你看到那些proxy\u set\u header指令了吗?这些是远程IP和远程端口可以传递的方式。在P

如何使
stream\u socket\u get\u name
从远程客户端返回真实的IP地址

$ip = stream_socket_get_name($socket, true);
上面的返回类似于
127.0.0.1:39872

nginx
问题是
stream\u socket\u get\u name()
对文件句柄进行操作。在这种情况下,文件句柄始终连接到代理,因此只能获取代理信息。但是你看到那些
proxy\u set\u header
指令了吗?这些是远程IP和远程端口可以传递的方式。在PHP中,必须检查头的值。

我的问题是如何获取这些头;)嗯,我从来没有为websocket编程过,但我猜它遵循PHP的惯例,即输入一个变量。你的问题是如何获得一个系统调用来获得它,这是行不通的。本机函数只是为了显示我想要实现的功能
server {
    listen 8443 ssl;
    server_name  websocket.example.com;
    
    ssl_certificate  /var/ini/ssl/public.crt;
    ssl_certificate_key  /var/ini/ssl/private.key;
    
    location / {
        proxy_redirect  off;
        
        proxy_pass  http://127.0.0.1:9000/;
        proxy_http_version  1.1;
        proxy_set_header  Upgrade $http_upgrade;
        proxy_set_header  Connection "upgrade";
        proxy_read_timeout  300;
        
        proxy_set_header  X-Real-IP $remote_addr;
        proxy_set_header  X-Forwarded-Proto https;
        proxy_set_header  X-Forwarded-For $remote_addr;
        proxy_set_header  X-Forwarded-Host $remote_addr;
    }
}