首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在两个码头集装箱之间使用cookies (码头组合)

如何在两个码头集装箱之间使用cookies (码头组合)
EN

Stack Overflow用户
提问于 2022-07-19 21:46:12
回答 1查看 391关注 0票数 1

网络结构图

我跟随着这些由本·阿瓦德( Ben )视频激励的流程:NIQ-R4 https://www.youtube.com/watch?v=25GS0MLT8JU

一般模式是内存中的访问令牌,刷新令牌为httponly cookie*。这看起来非常安全和开发友好。

但是,由于我的节点前端和api后端都是文档化的:在SSR期间,我希望使用到后端的本地连接,而不是通过DNS。默认情况下,这是一个桥接网络。这带来了一个问题。由于后端的内部uri是http://backend,而不是http://localhost:8000 (或生产中的DNS名称),所以cookie并不适用于该域,尽管它实际上是与我们获得的cookie相同的应用程序。

那么:什么是最好的解决方案,我如何实现它?

解决办法的想法:

  • 不使用本地连接并让前端容器使用主机网络
  • 将本地连接从http://backend重命名为http://localhost
  • 设置两个cookie,一个用于http://backend,另一个用于本地主机
  • 将刷新令牌存储在不是cookie的地方
EN

回答 1

Stack Overflow用户

发布于 2022-07-25 01:29:48

您可以使用Nginx来解决这个问题,因为当向后端服务器发送请求时,前端的头将包含一个用于验证的cookie,您可以将每个服务器绑定到主机上的不同端口,然后在域控制面板上添加一个CNAME记录,将发送给(作为) api.mydomain.com的所有请求定向到Nginx配置中的mydomain.com,然后在Nginx配置中这样做。

Nginx Config

代码语言:javascript
复制
server {

    server_name mydomain.com;
    listen 80;
    location '/' {
        proxy_pass 'http://localhost:8000/';
    }

}


server {
    listen 80;
    server_name api.mydomain.com;
    location '/' {
        proxy_pass 'http://localhost:7000/';
    }

}

然后,您可以使用svelte externalFetch更改服务器端的路径,因此当请求到达服务器时,您可以使用本地主机URL重写它,而不是获取指定的URL,如下所示:

src/hooks.ts

代码语言:javascript
复制
export async function externalFetch(request) {
    if (request.url.includes('api.mydomain.com')) {
      const localPath = new URL(request.url.pathname, 'http://localhost:7000')
      request = new Request(localPath.href, request);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73043804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档