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

如何为DigitalOcean Droplet上的Docker化Python REST API配置HTTPS?

配置Docker化Python REST API + Nginx启用HTTPS

以下是针对你的场景的具体配置步骤,全程基于DigitalOcean Droplet环境:

1. 调整Docker API的端口映射

首先确保你的Python API容器仅监听本地主机(避免直接暴露公网),修改Docker启动命令或docker-compose.yml:

  • 如果用docker run:
    docker run -d -p 127.0.0.1:8000:8000 --name your-api-container your-api-image
    
  • 如果用docker-compose.yml,修改ports字段:
    services:
      api:
        image: your-api-image
        ports:
          - "127.0.0.1:8000:8000"
    

这里把API的容器端口(假设是8000)映射到主机的127.0.0.1:8000,仅允许Nginx本地转发请求。

2. 安装Nginx与Certbot

在Droplet上执行以下命令安装依赖:

sudo apt update && sudo apt install -y nginx certbot python3-certbot-nginx

Certbot用于自动获取Let's Encrypt免费SSL证书,并自动配置Nginx。

3. 配置Nginx反向代理

创建Nginx站点配置文件:

sudo nano /etc/nginx/sites-available/api.yourdomain.com

粘贴以下配置(替换api.yourdomain.com为你的实际域名):

# HTTP 服务,用于Certbot验证与重定向到HTTPS
server {
    listen 80;
    server_name api.yourdomain.com;

    # 所有HTTP请求重定向到HTTPS
    return 301 https://$host$request_uri;
}

# HTTPS 服务,反向代理到Python API
server {
    listen 443 ssl;
    server_name api.yourdomain.com;

    # SSL 证书路径(后续Certbot会自动填充)
    ssl_certificate /etc/letsencrypt/live/api.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/api.yourdomain.com/privkey.pem;

    # 反向代理配置
    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

4. 启用配置并验证Nginx

创建软链接启用站点:

sudo ln -s /etc/nginx/sites-available/api.yourdomain.com /etc/nginx/sites-enabled/

测试Nginx配置是否合法:

sudo nginx -t

如果输出test is successful,重启Nginx生效:

sudo systemctl restart nginx

5. 获取并配置SSL证书

运行Certbot自动获取证书并更新Nginx配置:

sudo certbot --nginx -d api.yourdomain.com

按照终端提示操作:

  • 输入邮箱接收证书过期提醒
  • 同意服务条款
  • 选择是否共享邮箱(可选)
  • Certbot会自动配置SSL证书,并更新Nginx的HTTPS规则

6. 验证HTTPS访问

访问https://api.yourdomain.com/(替换为你的API实际端点),确认返回正常的API响应。同时检查HTTP请求(http://api.yourdomain.com)是否自动跳转到HTTPS。

7. (可选)NextJS前端的HTTPS配置

如果NextJS也部署在同一台Droplet,可以新增一个Nginx站点配置(比如/etc/nginx/sites-available/yourdomain.com),反向代理到NextJS的运行端口(假设是3000),同样用Certbot配置SSL:

server {
    listen 80;
    server_name yourdomain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

重复启用配置、验证Nginx、获取证书的步骤即可。

关键注意事项

  • 确保DigitalOcean Droplet的防火墙(或Ufw)开放80和443端口:sudo ufw allow 'Nginx Full'
  • 定期更新Certbot证书(默认自动续期,可通过sudo certbot renew --dry-run测试)
  • 如果API容器使用自定义Docker网络,可直接用容器名作为proxy_pass目标(比如http://api:8000),无需映射主机端口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 12:45:19