{{item}}
{{item.title}}
{{items.productName}}
{{items.price}}/年
{{item.title}}
部警SSL证书可实现网站HTTPS加密保护及身份的可信认证,防止传输数据的泄露或算改,提高网站可信度和品牌形象,利于SEO排名,为企业带来更多访问量,这也是网络安全法及PCI合规性的必备要求
前往SSL证书通过Nginx反向代理为API接口配置SSL证书(基于HTTPS协议),可在 “客户端与Nginx”“Nginx与API服务端” 之间构建双重加密通道,实现 “身份认证、数据机密性、完整性校验”,是保障API接口安全的关键手段。本文将围绕“使用Nginx反向代理为API接口添加SSL证书”这一目标,从准备工作、配置步骤、验证测试到优化建议,提供全流程操作指南。
通过Nginx反向代理接收客户端HTTPS请求,解密后将明文请求转发至后端API服务(HTTP或HTTPS均可),并返回后端响应时重新加密为HTTPS返回客户端。
生产环境推荐使用Let’s Encrypt的免费证书(通过Certbot工具自动申请),测试环境可手动创建自签名证书。
方式1:Let’s Encrypt自动申请(推荐)
# 安装Certbot(以Ubuntu为例)
sudo apt update && sudo apt install certbot python3-certbot-nginx -y
# 自动申请并配置证书(需确保域名已解析到当前服务器)
sudo certbot --nginx -d your-api-domain.com # 替换为实际API域名
Certbot会自动修改Nginx配置文件并续期证书(默认每90天自动续期一次)。
方式2:手动生成自签名证书(测试用)
# 生成RSA私钥(2048位,生产环境建议4096位)
openssl genrsa -out /etc/nginx/certs/api.key 2048
# 生成自签名证书(有效期365天)
openssl req -new -x509 -days 365 -key /etc/nginx/certs/api.key \
-out /etc/nginx/certs/api.crt \
-subj "/CN=your-api-domain.com" # 替换为实际域名
Nginx通过server块定义虚拟主机,需为HTTPS(443端口)单独配置一个server块,并关联SSL证书与反向代理规则。
配置文件示例(/etc/nginx/conf.d/api-proxy.conf)
# HTTPS服务器配置
server {
listen 443 ssl http2; # 启用HTTPS、SSL及HTTP/2(提升传输效率)
server_name your-api-domain.com; # 替换为实际API域名
# SSL证书配置(必选)
ssl_certificate /etc/nginx/certs/api.crt; # 公钥证书路径
ssl_certificate_key /etc/nginx/certs/api.key; # 私钥文件路径
# SSL协议与加密套件优化(关键安全配置)
ssl_protocols TLSv1.2 TLSv1.3; # 禁用TLSv1.0/1.1(存在已知漏洞)
ssl_ciphers 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers on; # 优先使用服务端加密套件
# SSL会话复用(减少握手开销,提升性能)
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# 反向代理至后端API服务(核心功能)
location / {
proxy_pass http://backend-api; # 后端服务地址(可指向IP:端口或域名)
# 传递客户端真实IP(避免后端日志丢失真实来源)
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; # 告知后端当前是HTTPS协议
}
}
# 可选:HTTP强制跳转HTTPS(提升安全性)
server {
listen 80;
server_name your-api-domain.com;
return 301 https://$host$request_uri; # 所有HTTP请求重定向至HTTPS
}
# 检查Nginx配置是否有语法错误
sudo nginx -t
# 若提示“syntax is ok”和“test is successful”,则重启Nginx生效
sudo systemctl reload nginx # 或restart nginx(首次启动用start)
通过浏览器访问https://your-api-domain.com,检查:
curl -k https://your-api-domain.com/health-check # -k跳过自签名证书校验(仅测试用)
通过在线工具(如https://www.ssllabs.com/ssltest/)扫描域名,确认:
登录Nginx服务器,使用telnet或nc测试与后端API服务的连通性:
telnet backend-api 8080 # 替换为实际后端地址和端口
若连接失败,需检查后端服务是否启动、防火墙规则是否允许Nginx服务器访问。
Let’s Encrypt证书有效期仅90天,需通过cron任务或systemd timer实现自动续期。Certbot安装后会自动添加续期任务,可通过以下命令验证:
sudo systemctl list-timers | grep certbot # 查看续期定时器
现象:浏览器提示“证书不受信任”。
解决方案:
现象:HTTPS页面中加载HTTP资源导致安全标识失效。
解决方案:
建议采用以下工具简化运维:
通过Nginx反向代理为API接口添加SSL证书,是保障数据传输安全的低成本、高效率方案。核心步骤包括证书部署、Nginx反向代理配置、安全策略优化及长期维护。需特别注意生产环境应使用CA颁发的证书,禁用弱加密协议,并通过自动续期机制避免证书过期导致的服务中断。
Dogssl.com拥有20年网络安全服务经验,提供构涵盖国际CA机构Sectigo、Digicert、GeoTrust、GlobalSign,以及国内CA机构CFCA、沃通、vTrus、上海CA等数十个SSL证书品牌。全程技术支持及免费部署服务,如您有SSL证书需求,欢迎联系!