通過Nginx和網關到微服務獲取真實請求的IP


1、Nginx

http {
    include       mime.types;
    default_type  application/octet-stream;

  upstream gwadds {
  server 127.0.0.1:81;
}

server {
  listen 80;
  server_name  gw.com;
  location / {
    proxy_pass http://gwadds/;
    proxy_set_header   Host             $host;
    proxy_set_header   X-Real-IP        $remote_addr;                        
    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

  }
}

 

2、網關配置過濾器

@Component
public class GatewayFilter implements GlobalFilter {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        //  nginx 會從請求頭中設置 客戶端的真實ip放入網關
        String sourceIp = exchange.getRequest().getHeaders().getFirst("X-Real-IP");
        if (StringUtils.isEmpty(sourceIp)) {
            ServerHttpResponse response = exchange.getResponse();
            response.setStatusCode(HttpStatus.BAD_REQUEST);
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("code", "500");
            jsonObject.put("msg", "sourceIp is null");
            DataBuffer buffer = response.bufferFactory().wrap(jsonObject.toJSONString().getBytes());
            return response.writeWith(Mono.just(buffer));
        }
        // 使用網關過濾
        return chain.filter(exchange);
    }

}

3、微服務

@Api(tags = "會員登陸接口")
public interface MemberLoginService {

    @PostMapping("/login")
    BaseResponse<JSONObject> login(@RequestBody UserLoginDto userLoginDto, @RequestHeader("X-Real-IP")
            String sourceIp, @RequestHeader("channel") String channel, @RequestHeader("deviceInfor") String deviceInfor);
}

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM