如何使stream_socket_get_name
返回远程客户端的真实IP地址?
$ip = stream_socket_get_name($socket, true);
上面的返回类似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;
}
}
答案 0 :(得分:0)
问题是stream_socket_get_name()
在文件句柄上运行。在这种情况下,文件句柄始终连接到您的代理,因此您只能获取代理信息。但是您看到那些proxy_set_header
指令吗?这些就是远程IP和远程端口可以传入的方式。在您的PHP中,您必须检查标头的值。