部署Socket.IO应用时Nginx代理下的access_token认证问题
Socket.IO + Nginx代理下的认证令牌传递问题
环境配置
- 前后端应用采用Socket.IO实现实时通信
- 前端通过
access_token请求头完成Socket连接认证
本地正常情况
前端传递access_token后,后端在握手阶段能正常获取到该请求头,示例如下:
handshake: { headers: { host: 'localhost:3000', connection: 'keep-alive', 'sec-ch-ua': '"Not/A)Brand";v="99", "Google Chrome";v="115", "Chromium";v="115"', accept: '*/*', dnt: '1', acces_token: 'mytokenvalue', 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36', 'sec-ch-ua-platform': '"Windows"', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', referer: 'http://localhost:3000/admin', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'en-IN,en-GB;q=0.9,en-US;q=0.8,en;q=0.7' }, }
部署后异常情况
通过K8s Ingress的Nginx代理后,后端无法接收access_token令牌,导致Socket认证失败。
已尝试的配置
1. 静态令牌配置(有效)
设置静态令牌值时,后端能正常收到:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress annotations: nginx.ingress.kubernetes.io/configuration-snippet: | proxy_set_header acces_token "MyToken"; spec: # ... 其他Ingress配置
2. 动态获取令牌配置(无效)
尝试动态获取请求中的令牌,但后端无法收到:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress annotations: nginx.ingress.kubernetes.io/configuration-snippet: | proxy_set_header acces_token "$http_x_acces_token"; spec: # ... 其他Ingress配置
求助需求
恳请提供解决该认证问题的思路或建议。
内容的提问来源于stack exchange,提问作者Prathyu Prasad
相关产品推荐
相关产品推荐

