springcloud gateway转发后getServerName被更改的问题

该问题起源于一次将代码移植到微服务产生。当使用springcloud gateway更换掉nginx网关后,出现无法登录的情况,跟进发现转发的信息里丢失了Host

复制代码
=== MimeHeaders ===
accept = */*
knife4j-gateway-code = ROOT
content-type = application/x-www-form-urlencoded
user-agent = Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36
request-origion = Knife4j
origin = http://localhost:7003
sec-fetch-site = same-origin
sec-fetch-mode = cors
sec-fetch-dest = empty
referer = http://localhost:7003/doc.html
accept-encoding = gzip, deflate, br
accept-language = zh-CN,zh;q=0.9
cookie = oxygentk=99d0a1b10bdd1443589a3416184d31984ed81136535c2e6498edbae12728f748; oxygenuid=36AB9A653683D50D4EC7E525BD9C96E9; charge-key={%22userId%22:3603%2C%22name%22:%22%E6%96%B0%E6%89%8B3603%E5%95%8A%22%2C%22icon%22:%22https://whalesing-web.oss-cn-guangzhou.aliyuncs.com/appres/forbidden.png%22}; AWX_RISK_ID=f6f3dd72e6cee7611eddf8328462756df97853ca; Hm_lvt_5819d05c0869771ff6e6a81cdec5b2e8=1684128760; Hm_lpvt_5819d05c0869771ff6e6a81cdec5b2e8=1684129236; lang=zh-CN; i_like_gogs=f529fa5db09e7bdd; JSESSIONID=20A183584BD3512F939D5696D56DA14A
forwarded = proto=http;host="localhost:7003";for="[0:0:0:0:0:0:0:1]:1926"
x-forwarded-for = 0:0:0:0:0:0:0:1
x-forwarded-proto = http
x-forwarded-prefix = /biz-core
x-forwarded-port = 7003
x-forwarded-host = localhost:7003
host = 192.168.1.196:8083
content-length = 0

上面看到host信息已经变成ip地址,而原地址被放到了x-forwarded-host。

因为request.getHeaders()会优先获得Host的Header,导致了request.getHeaders()的结果和原信息不一致。解决办法有两种

1)单独获得x-forwarded-for头部信息

2)设置gateway按原头部进行转发。添加参数PreserveHostHeader:

bootstrap.yml

复制代码
server:
  port: 7003
spring:
  application:
    name: gateway
  cloud:
    nacos:
      default-filters:
        - PreserveHostHeader #发送原主机头
      discovery:
        namespace: public
        server-addr: 192.168.1.196:8848
相关推荐
数据皮皮侠AI17 小时前
上市公司股票名称相似度(1990-2025)
大数据·人工智能·笔记·区块链·能源·1024程序员节
奥升新能源平台1 天前
奥升充电平台安全稳定体系构建
运维·安全·开源·springcloud
qq_165901691 天前
spring-cloud读取Nacos上的配置
java·spring cloud·springcloud
开开心心就好1 天前
系统清理工具清理缓存日志,启动卸载管理
linux·运维·服务器·神经网络·cnn·pdf·1024程序员节
无心水1 天前
【分布式利器:腾讯TSF】2、腾讯微服务框架TSF实战指南:Spring Boot零侵入接入与容器化部署全流程
java·spring boot·分布式·微服务·springcloud·分布式利器·腾讯tsf
lhrimperial1 天前
深入浅出Spring Cloud Gateway:从理论到企业级实践(一)
spring cloud·微服务·系统架构·gateway
lhrimperial1 天前
深入浅出Spring Cloud Gateway:从理论到企业级实践(二)
spring cloud·微服务·系统架构·gateway
ghostwritten2 天前
云原生流量治理新标准:Kubernetes Gateway API 部署实践指南
云原生·kubernetes·gateway
齐 飞2 天前
Spring Cloud Alibaba快速入门-Gateway
spring cloud·微服务·gateway
Linux运维技术栈2 天前
Gravitee Kafka Gateway 规范部署:HTTP API化封装与安全隔离实践
http·kafka·gateway