You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Let's Encrypt和Docker加密AWS EC2上的R Plumber API

解决AWS EC2 Ubuntu上Plumber API的Nginx+HTTPS配置问题

看起来你已经走完了Docker镜像构建和运行的关键步骤,现在卡在Nginx+Let's Encrypt的生产配置上对吧?我来帮你一步步梳理正确的配置流程,避开常见的坑:

1. 先确认Nginx基础服务正常

首先确保Nginx已经正确安装并运行:

sudo apt update && sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx

此时访问EC2的公网IP,能看到Nginx的默认欢迎页面,就说明基础服务没问题。

2. 创建专属的Nginx站点配置

别直接修改默认配置文件,新建一个专门的API配置文件更清晰,比如/etc/nginx/sites-available/unpie-api

server {
    listen 80;
    server_name your-domain.com; # 替换成你实际的域名,比如api.yourdomain.com

    # 预留Certbot的验证路径,这一步很重要,不然证书会申请失败
    location /.well-known/acme-challenge/ {
        root /var/www/html;
        allow all;
    }

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

然后创建软链接启用这个配置:

sudo ln -s /etc/nginx/sites-available/unpie-api /etc/nginx/sites-enabled/

测试配置语法是否合法:

sudo nginx -t

如果提示test is successful,就重启Nginx生效:

sudo systemctl reload nginx

3. 用Certbot自动获取SSL证书

安装Certbot和Nginx插件:

sudo apt install certbot python3-certbot-nginx -y

运行命令自动申请并配置证书:

sudo certbot --nginx -d your-domain.com

按照终端提示操作,选择「重定向所有HTTP请求到HTTPS」的选项,Certbot会自动帮你修改Nginx配置,添加HTTPS的server块。

4. 配置反向代理到Docker容器

现在需要修改刚才的Nginx配置文件(/etc/nginx/sites-available/unpie-api),找到Certbot自动生成的listen 443 ssl;的server块,添加反向代理规则:

location / {
    proxy_pass http://localhost:8001; # 对应你Docker映射的主机8001端口
    # 传递客户端真实IP和协议信息给Plumber API
    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:

sudo nginx -t
sudo systemctl reload nginx

5. 验证配置效果

现在访问你的域名(比如https://your-domain.com),应该能正常调用Plumber API的接口了。可以通过浏览器地址栏的锁图标,确认证书是Let's Encrypt颁发的有效证书。

常见问题排查

如果你之前替换配置时出错,大概率是这几个原因:

  • 域名解析未生效:用nslookup your-domain.com验证域名是否指向EC2的公网IP,DNS生效可能需要10-30分钟
  • EC2安全组未开放端口:一定要在AWS控制台开放80(HTTP)和443(HTTPS)端口,否则外部无法访问
  • Docker容器异常:用docker ps检查容器是否正常运行,docker logs unpie1查看API日志有没有报错
  • Nginx配置语法错误:每次修改配置后都要运行nginx -t,语法错误会直接导致Nginx无法启动

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

火山引擎 最新活动