Vercel News

Secure internal communication between services

6.7内容质量

TL;DR · AI 摘要

Secure internal communication between services - Vercel Service Bindings make it easy for one Vercel service to securely...

核心要点

  • 主题聚焦:Secure internal communication between services
  • 来源:Vercel News,建议结合原文判断细节。
  • AI 分析暂不可用,本条为保底评分与摘要。
#AI#编程#前端#后端#安全
打开原文

服务之间的安全内部通信 - Vercel

服务绑定使同一个部署中的一个 Vercel 服务能够安全地调用另一个服务变得简单易行。

当一个服务为另一个服务声明绑定时,Vercel 会自动注入配置的环境变量。这意味着用户代码可以正常获取该 URL,而 Vercel 会在后台处理内部重写、路由、认证和 TLS:

code
1
{
2
"services"
:
{
3
"my_frontend"
:
{
4
"root"
:
"frontend/"
,
5
"framework"
:
"nextjs"
,
6
"bindings"
:
[
7
{
8
"type"
:
"service"
,
9
"service"
:
"my_backend"
,
10
"format"
:
"url"
,
11
"env"
:
"BACKEND_INTERNAL_URL"
12
}
13
]
14
}
,
15
"my_backend"
:
{
16
"root"
:
"backend/"
,
17
"entrypoint"
:
"main:app"
18
}
19
}
20
}

在上述示例中,my_frontend 可以通过向 BACKEND_INTERNAL_URL 发起 fetch() 请求来访问 my_backend 服务。

app/api/users/route.ts

code
1
export
async
function
GET
(
)
{
2
const
url
=
new
URL
(
"/users"
,
process
.
env
.
BACKEND_INTERNAL_URL
)
;
3
const
res
=
await
fetch
(
url
)
;
4
const
users
=
await
res
.
json
(
)
;
5
return
Response
.
json
(
users
)
;
6
}

前端通过注入的内部 URL 调用后端。流量永远不会离开 Vercel 网络。

在 FastAPI 侧,my_backend 暴露一个普通路由:

code
1
from
fastapi
import
FastAPI
2
3
app
=
FastAPI
(
)
4
5
@app
.
get
(
"/users"
)
6
def
get_users
(
)
:
7
return
[
.
.
.
]

内部实现原理

该 URL 指向 Vercel 内部,而非公共地址。当代码获取该 URL 时,请求会通过 Vercel 内部网络传输到处理所有请求的相同路由层,然后发送到目标服务。该请求永远不会经过公共路由表,Vercel 会为您设置 TLS 信任,因此普通的 HTTPS 请求无需证书配置即可正常工作。

只有在通过公共重写路由暴露服务或通过绑定私密暴露服务时,服务才可被访问。

可观测性

服务间调用也会显示在可观测性中,因此您可以查看哪个绑定服务被调用以及请求耗时:

计费

服务间调用按 Service RequestsFast Origin Transfer 计费。它们不会按 CDN RequestsFast Data Transfer 计费。请查看 服务计费和限制 获取当前费率。

了解更多

阅读 绑定文档 以声明绑定并查看完整参考。