我有nginx作为一个负载平衡器。
我有3台服务器运行在3台服务器的nginx和redis后面。
它们都在同一个ubuntu实例上的Docker镜像中运行。
这是问题 :我需要logging用户的IP和端口以备将来使用。 但是webSockets和udp都返回:
0.0.0.0:0
这显然不好。 必须有一种方法来转发客户信息。 我猜这是一个头的types和nginx可以利用它?
编辑 – 当前configuration:
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; } }
您不会将请求标头中的IP转发回您的节点。 一个不错的方法是至less设置你的位置块:
proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Host $remote_addr;