nginx 转发客户端 ip 和端口

nginx 转发客户端 ip 和端口

我有 nginx 作为负载均衡器。

我有 3 台服务器在 nginx 后面运行,并且为这 3 台服务器运行 redis。

它们都在同一个 ubuntu 实例上的 docker 镜像中运行。

问题就在这里:我需要记录用户的 ip 和端口以备将来使用。但是 webSockets 和 udp 都返回:

0.0.0.0:0

这显然是不好的。必须有一种方法来转发客户端信息。我猜这是某种类型的标头,nginx 可以利用它?

编辑-当前配置:

nginx.conf:

worker_processes 7;

# server context

events { worker_connections 1024; }

# Load balance WS traffic across the three servers
http {

    upstream node-app {
    least_conn;
    server node1:8080 weight=25 max_fails=3 fail_timeout=30s;
    server node2:8080 weight=25 max_fails=3 fail_timeout=30s;
    server node3:8080 weight=25 max_fails=3 fail_timeout=30s;
    }

    server {
    listen 80;

    location / {
      proxy_pass http://node-app;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection 'upgrade';
      proxy_cache_bypass $http_upgrade;
    }
    }

}

# Load balance UDP-based DNS traffic across the three servers
stream {

  upstream node-app-udp {
    least_conn;
    server node1:1337;
    server node2:1337;
    server node3:1337;
  }

  server {
      listen          1337 udp;
      listen          1337; #tcp
      proxy_pass      node-app-udp;
      proxy_timeout   3s;
      proxy_responses 3;
  }

}

答案1

你不会在发回节点的请求标头中转发 IP。一个好方法是在你的地点堵塞 :

proxy_set_header  X-Forwarded-For $remote_addr;  
proxy_set_header  X-Forwarded-Host $remote_addr;

相关内容