代码之家  ›  专栏  ›  技术社区  ›  clarkk

nginx代理转发和流套接字获取名称

  •  4
  • clarkk  · 技术社区  · 7 年前

    如何制作 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;
        }
    }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Cupcake Protocol    7 年前

    问题是 stream_socket_get_name() 在文件句柄上操作。在这种情况下,文件句柄总是连接到代理,因此您只能获取代理信息。但是你看到了 proxy_set_header 指示?这就是如何传递远程IP和远程端口。在您的PHP中,您必须检查头的值。

    推荐文章