ユーザーの実際の IP アドレスを正確に取得できないように、プロキシ サーバー、VPN、その他のツールを使用するなどして、ユーザーの IP アドレスが隠蔽または変更される場合があります。
上記の特別な状況に加えて、一般に、ユーザー アクセスは次のリンクを経由する場合があります:
フロントエンド -> nginx -> ゲートウェイ -> サービス。通常、後者の 3 つが取得する IP アドレスは、前の 3 つの IP アドレスのみになります (たとえば、ゲートウェイは nginx の IP アドレスしか取得できません)。したがって、一般に、フロントエンドからユーザー IP を取得し、それをヘッダー経由で渡す必要があります。
nginxの設定
server {
listen 80; #访问端口
server_name your_domain.com; #访问域名
location / {
proxy_pass http://your_backend; # nginx能访问的后端网关地址
proxy_set_header X-Real-IP $remote_addr; # 设置请求头中的 X-Real-IP 字段为用户真实 IP 地址
}
}
ゲートウェイ構成のグローバル インターセプターは GlobalFilter pass ip を実装します
ServerHttpRequest request = exchange.getRequest().mutate().
header(CommonConstants.REAL_IP,exchange.getRequest().getRemoteAddress().getHostString()).build();
サービスで得られるもの
/**
* HttpServletRequest在微服务中通过获取请求头从而获取到真实的客户端IP
*/
String ip = request.getHeader(CommonConstants.REAL_IP);