我目前在用Nginx作为代理部署我的Socket.IO应用程序时遇到了一个身份验证问题。在本地,一切都工作正常,我可以使用acces_token头验证套接字连接。然而,在部署之后,令牌在后端上不被识别。
设置:我有一个前端和后端应用程序,我使用Socket.IO进行实时通信。在前端,我发送一个access_token头来验证套接字连接。
问题:当部署应用程序并使用Nginx作为代理时,后端不再识别access_token头。这将导致套接字身份验证失败。
工作环境(Work Environment):in frontend i am passing like this
在后台我是这样得到的
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'
},
在这里我可以获得acces_token
部署环境(不工作):
[here令牌未接收](https://i.stack.imgur.com/qiwLe.png)
因此我们假设其nginx配置问题
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:
当我们添加这个静态值(MyToken)时,它得到...
但是我们需要这个值从请求我们尝试添加这样,
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:
# ... other Ingress specifications
但没有工作
我将非常感谢任何见解或建议,以帮助我解决这个身份验证问题。感谢您抽出宝贵时间提供帮助。
1条答案
按热度按时间mrzz3bfm1#
Nginx应该传递所有头文件,如果'proxy_pass_request_headers'是打开的,但默认情况下,带有下划线的头文件会被忽略,请参阅'ignore_invalid_headers'和'下划线_in_headers'设置。