故事得从google说起----
2017,google已经开始嫌弃http了,并“强制”要求使用https , 其实这也件好事。
虽然购买证书成本略高,但是免费的证书也有很多,
比如,Let's Encrypt、StartCOM、WoSign and so on
但是呢,不知道为什么(应该是为了SSL证书销售利益),最近,StartCOM,WoSign 都被mozilla/google内核的浏览器封了,
我原来用的是startcom的免费证书,过完年来,升级google chrome 到56 ,发现本站点变成了“不安全”状态。手动表情【捂脸】
后来发现了,腾讯有提供免费证书,于是,申请了试试,申请很快就通过了,感觉还不错(前几年都是翻墙到国外申请,【捂脸】)
于是呢,想给另一个域名也申请证书,换上证书后,也把80端口强制跳转到443端口上,访问没问题。
但是,出现了另一个问题, 其他站点向该站点上报数据接口,以前都是走http协议
现在问题来了,80端口强制跳转导致数据上报失败。。。
最初的想法 :
方法一:把http改成https
方法二:配置CURLOPT_FOLLOWLOCATION
方法一,由于不用环境的目标不一定是https,但是不能统一改成https,若通过配置来决定是否https也略繁琐,失败告终,
方法二,加上 允许重定向配置之后, 跳转是没问题了, 但是跳转之后变成了get,而且post参数也没有了
针对方法二做改进,准备在目标服务器的 nginx 修改配置 ,让80的端口的上报接口uri不做强制跳转
处理如下:
if ( $request_uri !~* "\/api\/api" ) {
rewrite ^/(.*) https://domain.com/$1 permanent;
break;
}
这做法是可行的
方法三:
后来发现有另一个处理办法,不需要改nginx配置
配置CURLOPT_POSTREDIR
即可
安装官方对该参数的说明是:
位掩码, 1 (301 永久重定向), 2 (302 Found) 和 4 (303 See Other) 设置 CURLOPT_FOLLOWLOCATION 时,什么情况下需要再次 HTTP POST 到重定向网址。
在7.0.7版本,已经把参数值改成了全局常量
遇到问题多思考,成长在于处理各种问题的经验积累。