2018-11-22

关于 Nginx 的一点坑 — HTTPS回源, add_header

前段时间在网站上部署了 Mathjax, 部署在 st.boxjan.com/MathJax 目录下, 我的 CDN 回源HOST也是这个. 但是, 我直接访问 st.boxjan.com/MathJax 是没有问题的, 一旦使用CDN域名回源访问就出现 博客的错误页, 最先猜想是因为目录问题, 后来发现好像是跟回源相关.

在st.boxjan.com的相关配置文件加入

add_header x-is-origin "true" always;

P.S. add_header 也有个坑, 就是他的处理顺序, Location项前的会被覆盖掉, 所以要在 后面添加 always 强制保留, 或者是添加到 Location 项目后面, 也可以根据需要添加在Location中. 我被这个东西困扰了有一会.

添加header之后不断测试发现: 通过CDN, Nginx回源就是有无法获取到x-is-origin头, 但直接访问是有的, 就觉得是SNI的问题. 但我用的腾讯云CDN不支持 SNI 认证, 只能从源站动手.

HTTPS中TLS握手是需要获取服务器上的证书进行验证的, 但腾讯云的CDN和自建的3台CDN貌似都没有验证这个服务器证书中的域名是否与要访问的域名相符, 源站的Nginx跟不可能知道应该使用哪个HostName的配置应对这次访问, 于是便使用了默认的, 恰巧, 默认的host就是boxjan.com, 这就导致访问不了.

修改方法就是将st.boxjan.com设置位default就可以了, 之后再出现什么问题,再调整就是了.

-- EOF --

comments

如果无法加载 请将 disqus.com | disquscdn.com 加入代理