我正在使用集群中的nginx入口来公开某些服务。我有一个处理身份验证的"auth“服务,我正试图通过nginx来设置它。当前,该服务有一个非常简单的GET端点,它总是使用一个UserId
头进行响应,并尝试设置两个cookie:
// This is implemented on Nest.js which uses express.js
@Get('*')
auth(@Res() res: Response): void {
res.header('UserId', '1')
res.cookie('key', 'value')
res.cookie('x', 'y')
res.status(200).send('hello')
}
当我手动向该端点发送请求时,但当我将其设置为对入口的注释时,我可以确认正在设置两个cookie:
nginx.ingress.kubernetes.io/auth-url: http://auth.dev.svc.cluster.local
并通过入口发送请求,只有一个cookie被转发到响应(第一个key=value
)。我不熟悉nginx的配置,我是否应该对其进行更改,以便设置两个cookie?
我在GitHub上找到了GitHub,但是它似乎是关于OAuth2的,对于我应该改变什么没有明确的解释。
发布于 2022-08-19 13:45:49
我想不出用Set-Cookie
头来解决这个问题的方法。不确定是否有更好的方法,但这里有一个解决办法:
我为location
块添加了一个片段,它将两个头部转换为cookies:
nginx.ingress.kubernetes.io/configuration-snippet: |
auth_request_set $auth_cookie1 $upstream_http_x_header1;
auth_request_set $auth_cookie2 $upstream_http_x_header2;
add_header Set-Cookie $auth_cookie1;
add_header Set-Cookie $auth_cookie2;
auth()
端点现在使用X-Header1
和X-Header2
头进行响应:
import { serialize } from 'cookie'
@Get('*')
auth(@Res() res: Response): void {
res.header('UserId', '1')
res.header('X-Header1', serialize('key', 'value'))
res.header('X-Header2', serialize('x', 'y'))
res.status(200).send('hello')
}
一切看起来都很好,这个解决方案类似于nginx添加的Set-Cookie头,它不支持多个Cookie。下面的代码是从nginx.conf
创建的nginx-controller
荚中的nginx-controller
文件中复制的。
auth_request_set $auth_cookie $upstream_http_set_cookie;
add_header Set-Cookie $auth_cookie;
https://stackoverflow.com/questions/73416058
复制相似问题