如何制作 stream_socket_get_name 从远程客户端返回真实的IP地址?
stream_socket_get_name
$ip = stream_socket_get_name($socket, true);
上面的返回类似于 127.0.0.1:39872
127.0.0.1:39872
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; } }
问题是 stream_socket_get_name() 在文件句柄上操作。在这种情况下,文件句柄总是连接到代理,因此您只能获取代理信息。但是你看到了 proxy_set_header 指示?这就是如何传递远程IP和远程端口。在您的PHP中,您必须检查头的值。
stream_socket_get_name()
proxy_set_header