微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – nginx proxy forward和stream_socket_get_name

如何使stream_socket_get_name从远程客户端返回真实的IP地址?

$ip = stream_socket_get_name($socket, true);

以上返回类似127.0.0.1:39872的内容

Nginx

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中,您必须检查标头的值.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐