Secure internal communication between services
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 分析暂不可用,本条为保底评分与摘要。
服务之间的安全内部通信 - Vercel
服务绑定使同一个部署中的一个 Vercel 服务能够安全地调用另一个服务变得简单易行。
当一个服务为另一个服务声明绑定时,Vercel 会自动注入配置的环境变量。这意味着用户代码可以正常获取该 URL,而 Vercel 会在后台处理内部重写、路由、认证和 TLS:
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
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 暴露一个普通路由:
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 Requests 和 Fast Origin Transfer 计费。它们不会按 CDN Requests 或 Fast Data Transfer 计费。请查看 服务计费和限制 获取当前费率。
了解更多
阅读 绑定文档 以声明绑定并查看完整参考。