1. 程式人生 > 其它 >Envoy代理後獲取客戶端真實ip

Envoy代理後獲取客戶端真實ip

專案中經常會有需求獲取到客戶端的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