Nginx请求转发端口、请求头丢失

Nginx请求转发端口、请求头丢失

一个老项目需要整合SSO,我们公司的SSO需要拦截请求地址,该路径下的所有请求必须先登录,当登录后通过Http Header传递用户信息,这里面先是通过apache->nginx->tomcat。

请求头丢失


其它业务都正常,这个业务的后端无论如何都获取不到apache发送过来的请求头,然后,我们就去掉nginx这个环境,发现tomcat能正常获取到相应的值,这时候,我们断定是nginx代理的问题,那么为什么部分请求头会丢失,部分请求头又可以正常传递呢?通过观察发现,丢失的请求头都是包含有_的,后面通过查资料发现,nginx默认会把header中带_的参数给过滤掉。要解决这个问题又两个方法:

  1. _改为-或者不要_.

2.在nginx的http模块中设置underscores_in_headers on;

端口丢失

一切都比较正常,SSO能够登陆成功,可是在跳转时,端口有丢失了。这个需要在location模块中配置端口的转发

1
2
3
location /{
proxy_set_header Host $http_host;
}

根目录重定向

我们这边有时候会超时,但是SSO这边还未超时,那么就会涉及到重新登录的问题,这里我采用的方式是,业务程序里面如果Redis中的session过期,那么就重定向到页面根目录,然后通过Nginx再重定向到自动登录页面,

1
2
3
location =/{
rewrite ^/ /ssologin;
}

这里是完全匹配,如果是根目录,就重定向到ssologin,如果此时SSO未过期,那么Apache会放行,业务系统重定向登录一次,如果SSO过期,那么Apache会拦截跳转到SSO登录页面,当然,其实为了方便,可以在程序拦截器中直接重定向到ssologin,但是有时候,超级管理员不想通过SSO登录,直接从业务系统后台登录,后台登录就直接访问tomcat,不走Nginx。

Nginx请求转发端口、请求头丢失

https://blogs.52fx.biz/posts/3924667022.html

作者

eyiadmin

发布于

2021-09-02

更新于

2024-05-31

许可协议

评论