【问题标题】:APIs in Cloud Run and Nginx reverse proxy in VMCloud Run 中的 API 和 VM 中的 Nginx 反向代理
【发布时间】:2020-10-04 12:22:28
【问题描述】:

我已将 6 个不同的基于 Flask 的应用程序部署到 Google Cloud Run。当我通过自动生成的 URL 访问它们时,它们工作得很好。现在,我想将所有 6 种服务统一在一个具有不同路由的域名下。

例如,
mydomain.com/user -> https://custom-user-asdtgthyju-de.a.run.app
mydomain.com/product -> https://custom-product-asdtgthyju-de.a.run.app

我尝试过的事情
1. Nginx 部署在单独的 VM 中,并通过反向代理到云运行 URL
不工作,在常规 VM 中部署的相同配置相同的代码可以工作,但对于云运行部署显示找不到路由“/user”

2。使用 ESPv2 的云端点
https://cloud.google.com/endpoints/docs/openapi/get-started-cloud-run
按照我的要求让它工作,但无法传递自定义标头,就像我使用 X-API-KEY 进行身份验证一样,它甚至没有进入 Cloud Run。它被 ESPv2 本身剥离。

请帮忙,我如何在云运行服务前配置反向代理/API 网关。有没有人尝试过外部 Nginx 到 Cloud Run 映射?

谢谢

【问题讨论】:

  • 您能否包含您的 Cloud Endpoints 配置文件,以了解我们如何帮助其正常工作?
  • 你终于找到办法了吗?
  • @lewislbr 我遵循了 petomalina 的回答,我想这是唯一的方法

标签: nginx google-cloud-platform google-cloud-endpoints api-gateway google-cloud-run


【解决方案1】:

使用 URL 路由获取单个域的最简单方法是使用 Firebase Hosting and its's redirection to Cloud Run。您可以将您的域添加到 Firebase 托管,并根据其来源 (URL) 重定向到特定的 Cloud Run 服务。

【讨论】:

  • 这是否真的做了超出标准 Cloud Run 已经做的事情?您可以直接在 Cloud Run 上使用自定义域,但当前版本不支持路径映射,因此您需要为每个服务创建一个子域。
  • NVM,我找到了它:firebase.google.com/docs/hosting/… 这可能确实符合您的要求。
【解决方案2】:

如果您的 Cloud Run 服务是公开的,@petomalina 的答案是最简单的。如果不是,它将无法按照this answer 工作

如果您的服务是 internal,我尝试了 OP 的 #1 选项,即在前面放置一个 nginx 反向代理并得到相同的错误:404。

该问题是由 Host 标头具有代理的主机,而不是 Cloud Run 服务的主机引起的。修复方法是配置 nginx 以覆盖 Host 标头:

upstream my-foo {
    server  foo.run.app:443;
}
location /foo/ {
    proxy_pass  https://my-foo;
    proxy_set_header Host foo.run.app;
    include /etc/nginx/proxy_params;
    proxy_ssl_session_reuse on;
}

【讨论】:

    猜你喜欢
    • 2022-06-16
    • 2022-01-09
    • 1970-01-01
    • 2017-08-16
    • 2018-10-10
    • 1970-01-01
    • 2020-03-08
    • 2020-08-21
    • 2018-10-24
    相关资源
    最近更新 更多