You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为GCP虚拟机实例的TCP端口配置HTTPS域名

解决GCP VM端口的HTTPS访问与SSL证书配置问题

核心问题梳理

  • DNS仅负责解析域名到IP,不处理端口映射,mydomain.com:26657无法访问并非DNS问题,而是服务未在对应端口提供HTTPS服务,或者浏览器的跨协议拦截机制触发了错误。
  • HTTPS网站中调用HTTP接口会触发混合内容拦截(net::ERR_SSL_PROTOCOL_ERROR本质是浏览器期望HTTPS响应,但实际收到HTTP内容),必须将接口转为HTTPS访问。

步骤1:配置域名解析到VM外部IP

确保你的域名(如mydomain.com或子域名api.mydomain.com)已通过DNS提供商解析到GCP VM的外部静态IP,DNS记录仅需填写IP,无需携带端口。

步骤2:获取免费SSL证书(Let's Encrypt)

无需从DNS提供商获取证书,使用Let's Encrypt即可免费生成,在GCP VM上执行以下操作:

  1. 安装Certbot工具:
    sudo apt update && sudo apt install certbot -y  # Debian/Ubuntu系统
    # CentOS/RHEL系统执行:sudo dnf install certbot -y
    
  2. 生成证书(需临时开放80端口,用于Let's Encrypt的HTTP-01验证):
    sudo certbot certonly --standalone -d mydomain.com -d api.mydomain.com
    
    按提示输入邮箱、同意条款,完成后证书会存储在/etc/letsencrypt/live/mydomain.com/目录下。

步骤3:用Nginx做反向代理(端口映射+SSL终止)

由于你的服务仅在26657、1317端口提供HTTP服务,通过Nginx将标准HTTPS端口(443)转发至这两个端口,同时处理SSL加密:

  1. 安装Nginx:
    sudo apt install nginx -y  # Debian/Ubuntu系统
    # CentOS/RHEL系统执行:sudo dnf install nginx -y
    
  2. 创建Nginx配置文件/etc/nginx/sites-available/mydomain.conf:
    server {
        listen 443 ssl;
        server_name mydomain.com;
    
        ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem;
    
        # 将26657端口服务映射到/tendermint路径
        location /tendermint/ {
            proxy_pass http://localhost:26657/;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    
        # 将1317端口服务映射到/rest路径
        location /rest/ {
            proxy_pass http://localhost:1317/;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
    
    # 自动将HTTP请求重定向到HTTPS
    server {
        listen 80;
        server_name mydomain.com;
        return 301 https://$host$request_uri;
    }
    
  3. 启用配置并重启Nginx:
    sudo ln -s /etc/nginx/sites-available/mydomain.conf /etc/nginx/sites-enabled/
    sudo nginx -t  # 检查配置语法是否正确
    sudo systemctl restart nginx
    
  4. 在GCP控制台开放80、443端口:
    找到对应VM的防火墙规则,添加允许TCP 80、443端口的入站规则,来源设置为0.0.0.0/0。

步骤4:访问测试

现在可通过以下HTTPS地址访问对应服务:

  • https://mydomain.com/tendermint/ 对应原http://external_ip:26657
  • https://mydomain.com/rest/ 对应原http://external_ip:1317
    在你的HTTPS网站中调用这些接口,不会再触发混合内容错误。

可选:证书自动续期

设置Certbot自动续期证书,避免手动操作:

sudo systemctl enable --now certbot.timer

内容的提问来源于stack exchange,提问作者Logesh R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 18:10:31