Cloudflare开启HTTPS加密后,请求转发到源站报522错误

Cloudflare开启HTTPS加密后,请求转发到源站报522错误

November 13, 2020

笔者使用Cloudflare做DNS,同时使用Cloudflare的SSL证书服务。整个链路如下图:

|----------|          |-----------|          |---------------|  
|  Brower  | ------>  | Cloudfare | ------>  | Origin Server |  
|----------|          |-----------|          |---------------|  

笔者想要做整个链路的https,但是在配置完之后,打开页面是看到522的错误。这个错误表示连接上源站点,但是请求超时。可以参考这个页面来找到可能的原因: https://support.cloudflare.com/hc/en-us/articles/115003011431-Error-522-Connection-timed-out#522error

Cloudfare在配置https的时候有4个选项:

  • Off (not secure): 不开启
  • Flexible: 仅在浏览器与Cloudflare之间用https加密传输, Cloudflare到源站之间不加密
  • Full: 整个链路的端到端加密, 源站可使用自签名的证书
  • Full (strict):整个链路的端到端加密,但是源站必须使用可信任的CA证书或者Cloudflare Origin CA证书。Cloudflare Origin CA证书是用于Cloudfare与源站之间的加密通讯,需要在Cloudflare控制台配置

如果选择不恰当的选项,可能会导致访问错误。比如,如果源网站用的是自签名的证书,但是选择Full (strict)选项,会报证书错误。

笔者遇到522的问题,是由于iptables规则的设置问题。把cloudflare的ip段添加到iptables的允许列表中就可以了。ip列表见: https://www.cloudflare.com/zh-cn/ips

iptables -A INPUT -p tcp -s  173.245.48.0/20  -j ACCEPT
iptables -A INPUT -p tcp -s  103.21.244.0/22  -j ACCEPT
iptables -A INPUT -p tcp -s  103.22.200.0/22  -j ACCEPT
iptables -A INPUT -p tcp -s  103.31.4.0/22  -j ACCEPT
iptables -A INPUT -p tcp -s  141.101.64.0/18  -j ACCEPT
iptables -A INPUT -p tcp -s  108.162.192.0/18  -j ACCEPT
iptables -A INPUT -p tcp -s  190.93.240.0/20  -j ACCEPT
iptables -A INPUT -p tcp -s  188.114.96.0/20  -j ACCEPT
iptables -A INPUT -p tcp -s  197.234.240.0/22  -j ACCEPT
iptables -A INPUT -p tcp -s  198.41.128.0/17  -j ACCEPT
iptables -A INPUT -p tcp -s  162.158.0.0/15  -j ACCEPT
iptables -A INPUT -p tcp -s  104.16.0.0/12  -j ACCEPT
iptables -A INPUT -p tcp -s  172.64.0.0/13  -j ACCEPT
iptables -A INPUT -p tcp -s  131.0.72.0/22  -j ACCEPT
最后更新于