如何让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;
}
}
问题是stream_socket_get_name()
文件句柄上运行。在这种情况下,文件句柄始终连接到您的代理,因此您只能获取代理信息。但是你看到那些proxy_set_header
指令了吗?这些是远程IP和远程端口可以传入的方式。在 PHP 中,您必须检查标头的值。