在阿里云 ECS 上配置 Nginx 反向代理 HTTPS,核心是在 Nginx 中监听 443 端口并加载 SSL 证书,再通过 proxy_pass 将加密流量转发到后端服务,适合需要隐藏后端架构且强制加密传输的场景。
先说结论:配置过程主要分为安装 Nginx、申请 SSL 证书、修改 Nginx 配置放行 443 端口三步,重点在于证书路径正确和安全组规则开放。
- 适合:需要对外提供 HTTPS 服务且后端为 HTTP 服务的场景
- 先准备:域名解析已生效、阿里云 SSL 证书已下载
- 验收:浏览器地址栏显示锁形图标且无安全警告
命令速用版
以下命令基于 CentOS/Alibaba Cloud Linux 系统,Ubuntu 请将 yum 替换为 apt:
# 安装 Nginx
sudo yum install nginx -y
# 启动并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
# 检查配置语法
sudo nginx -t
# 重载配置
sudo nginx -s reload
为什么会这样
Nginx 作为反向代理,位于客户端和后端服务之间。客户端请求先到达 Nginx,Nginx 解密 HTTPS 流量后,再以 HTTP 或 HTTPS 协议转发给后端。这样做的好处是后端服务无需关心证书管理,且可以隐藏后端真实 IP 和端口,同时由 Nginx 统一处理加密解密,减轻后端压力。
分步处理
步骤 1:准备环境与证书
确保 ECS 已安装 Nginx。登录阿里云控制台,在“数字证书管理服务”中申请免费 SSL 证书,下载 Nginx 格式的证书文件(通常包含 .pem 和 .key 文件),上传至服务器目录,例如 /etc/nginx/ssl/。
步骤 2:配置 Nginx
编辑配置文件,通常位于 /etc/nginx/conf.d/ 或 /etc/nginx/nginx.conf。新增一个 server 块监听 443 端口:
server {
listen 443 ssl;
server_name your_domain.com;
ssl_certificate /etc/nginx/ssl/your_cert.pem;
ssl_certificate_key /etc/nginx/ssl/your_key.key;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
步骤 3:放行安全组
在阿里云 ECS 控制台,找到实例的安全组配置,添加入站规则,协议选择 TCP,端口范围填写 443,授权对象为 0.0.0.0/0。
怎么验证是否生效
在本地电脑打开浏览器访问 https://your_domain.com,查看地址栏是否有锁形图标。也可使用命令行测试:
curl -v https://your_domain.com
如果返回 HTTP 200 且显示 SSL 握手成功,说明配置生效。同时检查 Nginx 错误日志 /var/log/nginx/error.log 确认无报错。
常见坑
1. 安全组未开放 443 端口,导致外部无法访问。
2. 证书文件路径填写错误,Nginx 启动失败。
3. 后端服务未启动或防火墙拦截了 Nginx 到后端的转发请求。
4. 域名解析未生效,需确认 DNS 已指向 ECS 公网 IP。
参考来源
- 阿里云开发者社区:配置 Nginx 反向代理实现 ECS 通过自定义域名内网访问 OSS
- 阿里云开发者社区:使用 Nginx 反向代理为域名配置 SSL 证书实现 HTTPS 访问
- 阿里云开发者社区:为 ECS 上的网站配置域名并使用 Nginx 实现 HTTPS 安全访问