AWS ECS + Fargate GraphQL请求上的Next.js CSR不起作用

t9aqgxwy  于 2022-12-23  发布在  其他
关注(0)|答案(1)|浏览(112)

我正在使用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

mzsu5hc0

mzsu5hc01#

您的客户端呈现(CSR)请求是在客户端的Web浏览器中运行的,而不是在AWS上运行的。这与“公共子网上的ALB”无关,因为在那个时候,前端ALB根本不参与,这纯粹是用户的Web浏览器/笔记本电脑在那个时候能够访问后端的问题。
为了使用户的Web浏览器能够连接到后端,后端负载平衡器必须位于公共子网中,并且它需要具有允许从Internet访问的安全组。
像您当前的配置那样拥有内部(仅限VPC)私有负载平衡器,只能用于所有到这些负载平衡器的流量都来自VPC内部的应用程序架构。

相关问题