
我搜尋了伺服器故障但找不到答案。也許我只是不知道正確的關鍵字或這是一個概念上的誤解。任何幫助,將不勝感激!
情況:
- 我的本地服務在 NGINX 反向代理後面運行
- 我用一個路由器上的 LAN DNS (Draytek)將 *.example.com 的本機請求直接解析到我的本機伺服器 (192.168.1.2)。
即使沒有網路連接,網域名稱也會解析到本地伺服器,並且所有服務都可以存取。這就是我使用 LAN DNS 的原因。到目前為止,一切都很好。
現在我只想允許本地客戶端透過使用來存取某些服務NGINX 存取模組和:
allow 192.168.1.0/24;
deny all;
但 NGINX 只能看到路由器的公共 IP,而不是客戶端的 IP(192.168.1.100),因此每個請求都會被拒絕:
[...] access forbidden by rule, client: 123.123.123.123, server: service.example.de, request: [...]"
我的問題是:
在這種情況下,如何區分 NGINX 上的本機用戶端和遠端用戶端?
答案1
首先是一個假設/條件,就是檢查你的路由器是否加入了X-轉寄-Forheader 或類似的東西(追蹤實際的客戶端 IP)
您應該先解析客戶端IP,透過ngx_http_realip_模組
那裡提供的範例配置:
set_real_ip_from 192.168.1.0/24;
set_real_ip_from 192.168.2.1;
set_real_ip_from 2001:0db8::/32;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
這樣,用於存取檢查的 IP 應該是正確的(實際客戶端)。
需要注意的是,使用此配置時,無法嘗試將路由器新增至 X-Forwarded-For 標頭自動地使用 proxy_add_x_forwarded_for,因為透過新增的 IP 將被前一個指令更改。這個具體案例已經討論過堆疊溢位時