我正在使用Next.js和Golang开发应用程序,带有Docker容器。在AWS ECS Fargate上,Next.js CSR graphql请求(查询/变异)不起作用,但SSR起作用。CSR请求超时。
有什么办法吗?我想请你告诉我该怎么办。
我认为CSR超时的原因是公共子网上的ALB无法连接到私有子网上的ALB。Next.js SSR/CSR请求使用不同的IP吗?
[前端] Next.js + Apollo客户端
[后端] Golang(回声)
[前端请求] SSR(工作正常,可从后端容器接收数据)
export const getServerSideProps: GetServerSideProps = async (ctx) => {
const { id } = ctx.query
const input: FetchPostByIdQueryVariables = {
id: Number(id),
}
const apolloClient = await initializeApollo(ctx)
const { data } = await apolloClient.query<FetchPostByIdQuery, FetchPostByIdQueryVariables>({
query: FETCH_POST_BY_ID,
variables: input,
})
const post = data?.fetchPostById as Post
return {
props: {
post: post,
},
}
}
CSR(不工作,变为超时)
const PostCreate: NextPage = () => {
const [createPost, { data, error }] = useMutation<
CreatePostMutation,
CreatePostMutationVariables
>(CREATE_POST, {
onCompleted(data) {
console.log('onCompleted', data)
},
onError(error) {
console.log('onError', error)
},
})
const onClick = async () => {
const input: CreatePostInput = {
title: title,
body: body,
image_url: 'tmp_url',
is_public: isPublic == '1' ? true : false,
}
try {
createPost({
variables: {
input: input,
},
})
} catch (err) {
console.log('createPost err', err)
}
}
[AWS ECS远门体系结构]
[公共子网](安全组A)ALB
↓
[私有子网](安全组B)前端应用程序(Next.js Apollo客户端)
↓
[专用子网](安全组C)ALB
↓
[私有子网](安全组D)后端应用程序(Golang Echo)
↓
[专用子网](安全组E)Aurora DB
1条答案
按热度按时间mzsu5hc01#
您的客户端呈现(CSR)请求是在客户端的Web浏览器中运行的,而不是在AWS上运行的。这与“公共子网上的ALB”无关,因为在那个时候,前端ALB根本不参与,这纯粹是用户的Web浏览器/笔记本电脑在那个时候能够访问后端的问题。
为了使用户的Web浏览器能够连接到后端,后端负载平衡器必须位于公共子网中,并且它需要具有允许从Internet访问的安全组。
像您当前的配置那样拥有内部(仅限VPC)私有负载平衡器,只能用于所有到这些负载平衡器的流量都来自VPC内部的应用程序架构。