GCloud https 到外部 ID 和云 DNS 不工作

GCloud https to external ID and Cloud DNS not working

很明显,我对网络知之甚少,非常感谢所有提示和解释。 我使用 gunicorn 和 nginx 在 flask 中编写了一个小网站应用程序。它是容器化的,并且在本地工作。我的目标是将它部署在 gcloud 上并有一个正确的域名指向它。

我设置了一个小型计算实例。我在该实例上使用了标准的 http 和 https 防火墙。我保留并设置了一个外部 IP EXT_IP。此外,我在该实例上为 443 入口和出口设置了允许防火墙。我 运行 docker 容器,同时将端口 80 和 443 映射到容器端口。我不确定是否有必要将 443 映射到容器端口。 当我 运行 http://[EXT_IP] 时,应用程序按预期工作。 然而,当我只是点击外部 IP 或使用 https 请求时,我确实收到 "Secure Connection Failed" 错误。

当我 运行 nmap EXT_IP 我得到以下输出,看起来很合理。

Host is up (0.039s latency).
Not shown: 994 filtered ports
PORT     STATE  SERVICE
22/tcp   open   ssh
80/tcp   open   http
443/tcp  open   https
3389/tcp closed ms-wbt-server
8000/tcp closed http-alt
8001/tcp closed vcom-tunnel

Nmap done: 1 IP address (1 host up) scanned in 10.64 seconds

此外,我尝试设置 Cloud DNS。我在 Google 域上购买了一个域,并为该域设置了一条 A 记录到保留的外部 IP,并为该域的 www.domain 设置了一个 CNAME 别名。 当我尝试使用域访问该站点时,出现未找到错误。 当我使用 host domain_name 我得到

Host [Domain Name] not found: 3(NXDOMAIN)

我怀疑有两件事出了问题。 https和DNS映射好像是分开的问题,但我不确定。

谁能帮我解决其中一个或两个问题?非常感谢您。

您有两个不同的问题

  • DNS 服务器配置;
  • NGINX 网络服务器配置。

要解决 DNS 问题,您应该遵循以下两种方式之一:

  1. 仅使用 Google Domains
    • 按照文档 Resource records
    • 在 Google 域端配置必要的 DNS 记录
    • remove 来自 Google Cloud DNS 的区域。
  2. 切换到Google Cloud DNS
    • create 您域的托管区域;
    • set custom DNS servers(与您在上一步创建的托管区域中看到的 NS 记录相同)为您的域。

之后您应该等待 24-48 小时进行 DNS 传播。您可以使用 dnsmap.io or mxtoolbox.com 等服务在线检查 DNS 的状态。如果一切配置正确,您将能够通过 http://domain.name and/or http://www.domain.name 查看您的应用程序。

要解决 SSL 问题,您应该按照这些文章中的说明进行操作 How To Secure a Containerized Node.js Application with Nginx, Let's Encrypt, and Docker Compose and Nginx and Let’s Encrypt with Docker in Less Than 5 Minutes to solve issue with SSL