Nginx 反向代理 HTTPS CDN 配置检查清单(避坑版)

Nginx反向代理HTTPS CDN 配置检查清单(避坑版)

适配场景:主站通过Nginx反向代理CDN加载图片/静态资源(如你的 picdn.yuming.com 场景),兼顾「可用性、安全性、性能」,对照检查即可避免90%以上问题。

一、核心必配项(缺一不可,解决502/SSL握手失败)

配置项 必配/可选 正确示例 作用 错误后果
proxy_pass 必配 proxy_pass https://picdn.yuming.com; 指定CDN后端地址(HTTPS协议) 协议写错(如http)会导致SSL报错;正则location拼接$request_uri可能导致路径重复
proxy_ssl_server_name 必配 proxy_ssl_server_name on; 开启SNI,向CDN传递目标域名 未开启则CDN返回默认证书,SSL握手失败(502)
proxy_set_header Host 必配 proxy_set_header Host picdn.yuming.com; 告诉CDN"当前请求的域名是picdn" 传递主站域名(如www.yuming.com)会导致CDN防盗链拦截/证书不匹配
代理协议一致性 必配 主站→CDN全程HTTPS 避免HTTP→HTTPS跳转导致的资源失效 主站HTTPS、代理用HTTP会触发混合内容错误,或CDN防盗链拒绝

二、SSL安全与兼容优化项(推荐配置,避免兼容/安全风险)

配置项 必配/可选 正确示例 作用 注意事项
proxy_ssl_protocols 推荐 proxy_ssl_protocols TLSv1.2 TLSv1.3; 限制SSL协议版本,避免旧协议漏洞 不建议包含TLSv1.1及以下(安全风险),需与CDN支持的协议匹配
proxy_ssl_verify 可选 测试:off;生产:on 验证CDN的SSL证书有效性 测试阶段关闭可快速排除证书链问题;生产开启需确保CDN证书完整(含中间证书)
proxy_ssl_connect_timeout 推荐 proxy_ssl_connect_timeout 10s; 限制SSL握手超时时间 超时过短(如3s)可能误触发失败,过长(如30s)会导致用户等待久
proxy_ssl_ciphers 推荐 proxy_ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384; 指定安全的加密套件 与CDN支持的加密套件对齐,避免弱加密算法

三、代理性能优化项(可选,提升响应速度)

配置项 必配/可选 正确示例 作用
proxy_http_version 推荐 proxy_http_version 1.1; 启用HTTP/1.1,支持长连接、Chunked编码
proxy_connect_timeout 推荐 proxy_connect_timeout 15s; 限制Nginx与CDN的连接超时
proxy_read_timeout 推荐 proxy_read_timeout 30s; 限制Nginx读取CDN响应的超时
proxy_buffer_size 推荐 proxy_buffer_size 16k; proxy_buffers 4 64k; 优化响应缓冲区,减少延迟
proxy_cache / proxy_buffering 可选 静态资源:proxy_cache off; proxy_buffering off; 禁止Nginx缓存,确保请求透传CDN(如需缓存可自定义规则)

四、浏览器缓存与跨域配置(按需配置)

配置项 必配/可选 正确示例 作用 适用场景
expires 推荐 expires 7d; 设置浏览器缓存时间 图片、静态资源(更新频率低)
Cache-Control 推荐 add_header Cache-Control "public, max-age=604800, immutable"; 强化缓存策略,避免重复验证 配合expires使用,immutable防止浏览器强制刷新
Access-Control-Allow-Origin 可选 add_header Access-Control-Allow-Origin "*"; 或指定域名 允许跨域访问 图片需被其他域名引用时开启(如主站多个子域名共用CDN)
Vary 可选 add_header Vary "Origin"; 优化跨域缓存,避免缓存污染 开启CORS后建议配置

五、CDN侧配合配置(必须同步检查,否则代理无效)

检查项 正确配置 错误后果
SNI域名绑定 CDN已添加picdn.yuming.com作为SNI域名,且绑定对应SSL证书 未绑定则CDN无法识别域名,返回默认证书(502)
证书完整性 CDN证书包含完整链(服务器证书+中间证书),且未过期 证书链不完整会导致Nginx验证失败(proxy_ssl_verify=on时502)
防盗链设置 允许主站IP(服务器公网IP)或主站域名(www.yuming.com)访问 未放行则CDN拒绝代理请求(403→Nginx返回502)
路径有效性 CDN已同步主站图片路径(如/uploads/attach/...),直接访问CDN路径正常 CDN路径不存在会导致404,代理后显示主站404页面

六、安全防护项(避免漏洞,推荐配置)

配置项 正确示例 作用
禁止敏感文件代理 `location ~* .(php jsp
限制请求方法 `if ($request_method !~ ^(GET HEAD)$) { return 405; }`
隐藏Nginx版本 server_tokens off; 减少服务器信息泄露,降低攻击风险

七、快速排查工具与命令(遇到问题先执行)

  1. 测试服务器到CDN的连通性(检查网络/防火墙):
bash 复制代码
# 测试SSL握手是否正常(带SNI参数)
curl -v --resolve picdn.yuming.com:443:CDN节点IP https://picdn.yuming.com/你的图片路径
# 或直接测试代理是否能通
curl -v https://picdn.yuming.com/你的图片路径
  1. 查看Nginx错误日志(定位502/SSL错误原因):
bash 复制代码
tail -f /www/wwwlogs/new.yuming.com.error.log
  1. 验证Nginx配置语法(修改后必查):
bash 复制代码
/www/server/nginx/sbin/nginx -t
  1. 重启Nginx(配置生效):
bash 复制代码
/www/server/nginx/sbin/nginx -s reload

八、常见错误-配置对应表(快速定位)

现象 大概率缺失的配置 修复动作
主站图片502,CDN直接访问正常 proxy_ssl_server_name on 添加该配置,开启SNI
代理后图片403 CDN防盗链未放行主站IP/域名 在CDN侧添加主站IP到白名单
SSL handshake failed错误 proxy_ssl_protocols不兼容/证书链不完整 调整协议版本,或关闭proxy_ssl_verify测试
图片路径重复(如//uploads/...) proxy_pass拼接了$request_uri 正则location下删除$request_uri,仅保留CDN域名
跨域访问图片报错(CORS) 未配置Access-Control-Allow-Origin 按需添加跨域头
相关推荐
群联云防护小杜2 小时前
国产化环境下 Web 应用如何满足等保 2.0?从 Nginx 配置到 AI 防护实战
运维·前端·nginx
suki_lynn2 小时前
Awaken Chaos Era 云手机推荐
运维·服务器
南棱笑笑生2 小时前
20251106给荣品RD-RK3588-MID开发板跑Rockchip的原厂Android13系统时禁止锁屏+永不休眠
linux·运维·服务器·rockchip
远程软件小帮手2 小时前
好用的云电脑!手机怎么用UU远程云电脑玩电脑游戏?
运维·服务器·游戏·电脑
会飞的小蛮猪3 小时前
ELK运维之路(数据备份and还原)
运维·服务器·elk
盛世宏博智慧档案3 小时前
新生产力算力机房内部温湿度之以太网监控系统方案
运维·服务器·网络·算力·温湿度
一介草民丶4 小时前
Linux | Mongodb 6 离线安装
linux·运维·mongodb
尽兴-5 小时前
[特殊字符] 微前端部署实战:Nginx 配置 HTTPS 与 CORS 跨域解决方案(示例版)
前端·nginx·https·跨域·cors·chrom
mc23565 小时前
Linux实用操作
linux·运维·服务器