nginx代理转发和stream_socket_get_name



如何让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 中,您必须检查标头的值。

最新更新