#事故現場:
服務器A(Nginx服務器):192.168.2.126
服務器B(Web服務器):192.168.2.221
服務器A反向代理服務器B,A配置了upstream為:
http { upstream test_server { server 192.168.2.221:8080 weight=1 max_fails=3 fail_timeout=30s; }
}
用瀏覽器訪問A:192.168.2.126 在服務端獲取Host,結果為:test_server ,而我想得到的是:192.168.2.221
context.Request.Headers.Get("Host");// text_server context.Request.ServerVariables["SERVER_NAME"]; // text_server
#原因及解決方案:
默認情況下反向代理是不會轉發請求中的Host頭部,如果需要轉發,則需要配置紅色字體表示的選項參數。
location /test { proxy_set_header Host $host; proxy_set_header X-real-ip $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://192.168.2.12:5252/test; }
#如果不修改Nginx配置,那服務端代碼如何獲取原始Host呢?
以asp.net代碼為例:
HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_HOST"];
#參考:https://www.cnblogs.com/yshyee/p/7531264.html