nginx 拒絕對虛擬主機的所有請求。請求來自 nginx tcp 轉發器
摘要 - 需要將白名單 ips 添加到 mysite1.example.com。現在,當它們被添加時,它不起作用,因為每個請求都來自負載平衡器伺服器。
我正在使用帶有上游後端的前置 Nginx 主機進行設置,以將埠 443 上的所有 tcp 數據包負載平衡到後端伺服器。
執行 nginx 的 Loadbalancer 伺服器的 nginx 配置 - 伺服器 C 如下
stream { upstream stream_backend { hash $remote_addr consistent; server 10.15.15.3:443; ## server A server 10.15.15.9:443; ## server B } server { listen 443; proxy_pass stream_backend; proxy_timeout 5s; proxy_connect_timeout 5s; } }
伺服器 A 和伺服器 B 具有以下 nginx.conf。它們是帶有應用程序的相同伺服器。
它有兩個虛擬主機在每個執行。他們工作正常。
http { server { server_name mysite1.example.com; listen *:443 ssl; listen [::]:443 ssl; allow 123.45.85.220; # this seems not working deny all; # only this is working location ^~ /static/ { ... } ... ssl_certificate file.pem; ssl_certificate_key file.key; } server { server_name mysite2.example.com; listen *:443 ssl; listen [::]:443 ssl; location /somethin { ... } location /something2{ ... } ssl_certificate file.pem; ssl_certificate_key file.key; } }
我需要的是將虛擬主機 mysite1.example.com 的幾個 ip 列入白名單。我面臨的問題是在伺服器 A 和 B 上執行的 nginx 將負載均衡器 Ip 視為客戶端 Ip。所以當嘗試添加允許 IP 時;全部否認。不適用於任何主機,因為它在所有請求上都將負載均衡器 IP 作為客戶端 IP。
有人可以指導我添加代理 IP 配置以實現上述設置執行良好。除 IP 白名單問題外,設置已完成。
ps Ssl 終止發生在後端伺服器、伺服器 A 和伺服器 B
我在網上搜尋並發現這些很有幫助,但仍然無法弄清楚如何讓它全部工作。
https://stackoverflow.com/questions/40873393/nginx-real-client-ip-to-tcp-stream-backend https://www.cyberciti.biz/faq/nginx-redirect-backend-traffic-based-upon-client-ip-address/
發生這種情況是因為您的 nginx 負載均衡器與您的 nginx Web 伺服器建立了新的 TCP 連接,導致原始客戶端 IP 地址失去。
您可以使用 PROXY 協議解決此問題。當新連接打開時,此協議會發送原始 IP 地址資訊,以便您的 Web 伺服器可以知道它。
要進行設置,您需要進行以下更改:
- 在負載均衡器上,設置
proxy_protocol on;
:stream { server { proxy_pass somewhere; proxy_protocol on;
- 在 Web 伺服器上,接受 PROXY 協議,並為負載均衡器的 IP 地址啟用真實 IP 功能。
server { listen 443 ssl http2 proxy_protocol; listen [::]:443 ssl http2 proxy_protocol; real_ip_header proxy_protocol; set_real_ip_from <load balancer's IP>;
您可以對代理協議進行額外的調整,您可以在nginx 文件中找到這些調整,但這應該可以幫助您開始並解決眼前的問題。