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 按需添加跨域头
相关推荐
郝学胜-神的一滴13 小时前
Linux命名管道:创建与原理详解
linux·运维·服务器·开发语言·c++·程序人生·个人开发
wanhengidc13 小时前
云手机性能如何?
运维·服务器·科技·智能手机·云计算
wan_da_ren13 小时前
Docker安装Elasticsearch9.2.1与Kibana9.2.1 保姆教程(带验证版)
运维·docker·jenkins
Eric.Lee202115 小时前
ubuntu 安装 Miniconda
linux·运维·python·ubuntu·miniconda
杭州泽沃电子科技有限公司15 小时前
在线监测:为医药精细化工奠定安全、合规与质量基石
运维·人工智能·物联网·安全·智能监测
行初心15 小时前
uos基础 cupsd.conf 查看打印服务的配置文件
运维
1***y17816 小时前
Git在发布流程中的自动化标签
运维·git·自动化
8***848216 小时前
如何在Linux中找到MySQL的安装目录
linux·运维·mysql
9***J62816 小时前
Linux下PostgreSQL-12.0安装部署详细步骤
linux·运维·postgresql
gggg远17 小时前
docker详解
运维·docker·容器