前因
后端使用spring boot 做了个oauth2 认证登录,访问web系统时会先跳oauth2 做单点登录,此时oauth2 需要拿到web系统的正确地址作为 redirect_uri 。然后问题出现了,后端这个oauth2 认证 服务死活拿不到正确的地址,要么是 https 变成http了,要么是端口丢失了。
花了一上午调试配置终于解决,配置如下 QAQ
NGINX配置:
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $http_host;
##关键配置,传递协议(http/https)给后端。
proxy_set_header X-Forwarded-Proto $scheme;
##关键配置,$server_port指nginx 监听的端口,如果nginx需要外网访问需要一对一映射,例如15547:15547 。非一对一映射可以直接写死端口 proxy_set_header X-Forwarded-Port 15547;
proxy_set_header X-Forwarded-Port $server_port;
Spring boot application.yaml 配置:
server:
tomcat:
remoteip:
protocol-header: X-Forwarded-Proto
remote_ip_header: X-Forwarded-For
remote:
port-header: X-Forwarded-Port
tomcat server.xml 在Engine中配置:
<Valve className="org.apache.catalina.valves.RemoteIpValve"
remoteIpHeader="X-Forwarded-For"
protocolHeader="X-Forwarded-Proto"
portHeader="X-Forwarded-Port"/>