我有 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;