Py学习  »  NGINX

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

clarkk • 4 年前 • 327 次点击  

如何制作 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;
    }
}
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38053
 
327 次点击  
文章 [ 1 ]  |  最新文章 4 年前
Cupcake Protocol
Reply   •   1 楼
Cupcake Protocol    5 年前

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