Envoy代理後獲取客戶端真實ip
阿新 • • 發佈:2022-04-21
專案中經常會有需求獲取到客戶端的ip,但是專案經過envoy代理後怎麼獲取呢?
一般的做法是通過envoy轉發時Header中帶的X-Forward-For來取,但是envoy需要正確配置才能將客戶端ip新增到X-Forward-For中去
經專案正確驗證,envoy需要注意以下兩個配置
use_remote_address: 預設值false,設定為true才能使用客戶端連線的真實遠端地址
skip_xff_append: 需要設為false,如果設定為true,則不會將遠端地址附加到x-forwarded-for中
如圖,這兩個配置是跟http_filters同級
服務端獲取ip,本人專案是grpc專案, 通過 ServerCallContext.RequestHeaders.Get("x-forwarded-for") 即可獲取到客戶端ip
注意!注意!!注意!!!
因為envoy專案需要執行在docker容器中,如果執行在windows系統的docker容器中(DockerDesktop),這種方式獲取到的ip實際上是容器的閘道器ip
所以一定要將envoy專案放到linux的docker容器中執行,切記切記!
不知道windows的docker還有多少坑!
參考地址:https://www.likecs.com/show-682654.html