标签 ssl 下的文章

前端看没有报错,但file_get_contents()返回了 null, 看服务端日志才发现这个提示。

以前也遇到过,备忘一下。当然改用 curl 也是不错的选择。

//$json_token = file_get_contents($url_accesstoken); //ssl报错
//修改方案,构造一个context参数,不验证ssl
$context = stream_context_create([
    'ssl' => [
        'verify_peer'      => false,
        'verify_peer_name' => false
        ]
]);
$json_token = file_get_contents($url_accesstoken,false,$context); //忽略报错,正确返回内容

参考来源:https://qiita.com/mindwood/items/fd23ddcb94fb4eefa99c

因为阿里云和腾讯云调整了免费SSL证书政策从1年有效期改成90日。寻找替代方案,看到cloudflare提供15年的证书,但条件是要使用它们家的DNS/CDN服务。验证是在dns过程中接管的。

跟着别人分享的教程一步步操作下来,证书是申请好配置到位了。同时也出现了标题的问题。请求PHP的响应正确,但如果是静态资源 例如加载 js html css png之类浏览器就会报错 301 提示重定向次数过多。

网上搜了一圈基本在说的是 http强制绑定https,当用户访问http时自动重定向到https的情况,设置在nginx conf 的http的 server{} 部分。这显然和我的项目情况不同,我只配置了443 ssl服务。我并不需要约束http。也没有往nginx的方向去想。

以为是cloudflare这种形式的ssl的问题,一直在CF的设置上去研究。

最后实在被搞烦了...决定弃坑,部署个脚本在服务端每90日自动续签ssl。

发现还是一样的问题,php正常打开,html 提示重定向次数过多

脑子被轰了...回头检查 nginx 的 vhost 配置文件。在 443 server{} 的最底部发现这段东西


location / {
    return 301 https://$host$request_uri;
}

WTF?

搞什么飞机... 为什么lnmp会生成这样奇怪的配置。已经是443了还自己跳转给自己

注释之后...问题消除

申请免费的 DV TLS 证书,采用文件方式验证的时候需要在 /.well-known/pki-validation/fileauth.txt
写入特定的字符串提交审核。

但默认这个 /.* 的路径 nginx 的访问规则是保护不允许访问的所以会提示 403

解决办法也很简单,为这个指定的路径开放访问权限即可
在 nginx.conf 或 vhost 文件中的 server{} 内增加以下内容(注意规则顺序避免被其他规则覆盖或提前拦截)

server
    {
        ...

        #ssl auth file
        location ~ /.well-known {
            allow all;
        }

        ...
    }

保存后重启nginx即可
注意阿里云的SSL验证不去检查https而是以http为准,所以务必80和443两个配置都要加上以上规则。试过只设置https验证失败