使用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




