在AWS EC2多应用场景下配置带SSL的自定义域名路由
基于NGINX的HTTPS反向代理配置方案(适配你的AWS EC2多服务场景)
前置准备
已完成事项:
- DNS服务商处将
api.mydomain.com指向EC2公网IP - EC2上Docker化的Node(3001端口)和Python(8001端口)服务正常运行
- 已拥有有效的SSL证书(包含证书文件和私钥)
步骤1:在EC2上安装NGINX
根据EC2系统选择对应命令:
- Ubuntu/Debian:
sudo apt update && sudo apt install nginx -y - Amazon Linux/CentOS:
sudo yum install nginx -y
安装完成后启动并设置开机自启:
sudo systemctl start nginx && sudo systemctl enable nginx
步骤2:上传SSL证书到EC2
- 创建证书存储目录:
sudo mkdir -p /etc/nginx/ssl/ - 将你的证书文件(如
mydomain.crt)和私钥文件(如mydomain.key)上传到该目录(可通过scp或AWS SSM传输) - 设置私钥权限(必须严格限制,否则NGINX无法启动):
sudo chmod 600 /etc/nginx/ssl/mydomain.key
步骤3:配置NGINX反向代理
- 备份默认配置文件:
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak - 编辑默认配置文件:
sudo nano /etc/nginx/sites-available/default - 替换为以下配置(注意替换证书路径为你实际的文件路径):
server { listen 80; server_name api.mydomain.com; # 强制HTTP请求跳转至HTTPS return 301 https://$host$request_uri; } server { listen 443 ssl; server_name api.mydomain.com; # 指定SSL证书和私钥路径 ssl_certificate /etc/nginx/ssl/mydomain.crt; ssl_certificate_key /etc/nginx/ssl/mydomain.key; # 基础SSL安全配置(可选但推荐) ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; # 转发/node路径到Node服务 location /node/ { # 移除请求路径中的/node前缀,避免后端服务收到带前缀的路径 rewrite ^/node/(.*)$ /$1 break; proxy_pass http://localhost:3001; # 传递客户端请求头,确保后端服务能正确获取请求信息 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; } # 转发/python路径到Python服务 location /python/ { rewrite ^/python/(.*)$ /$1 break; proxy_pass http://localhost:8001; 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 nginx -tnginx: configuration file /etc/nginx/nginx.conf test is successful则说明配置正确。 - 重启NGINX使配置生效:
sudo systemctl restart nginx
步骤5:配置EC2安全组
登录AWS控制台,找到EC2实例对应的安全组,添加以下入站规则:
- 允许HTTPS(443端口),来源设为
0.0.0.0/0(或你需要的访问范围) - 允许HTTP(80端口),来源设为
0.0.0.0/0(用于跳转HTTPS) - (可选更安全)限制3001和8001端口仅允许本地访问:添加入站规则,端口范围
3001,8001,来源127.0.0.1/32
常见问题排查
- 若访问
https://api.mydomain.com/node出现SSL错误:检查证书路径是否正确,私钥权限是否为600,证书是否包含中间证书(若有,需将中间证书内容追加到主证书文件末尾) - 若后端服务返回404:检查
rewrite规则是否正确,或后端服务是否能处理去掉/node//python前缀后的请求路径 - 若NGINX无法启动:查看日志
sudo journalctl -u nginx排查具体错误
内容的提问来源于stack exchange,提问作者Gustavo Pires
相关产品推荐
相关产品推荐

