标签 nginx 下的文章

嗯,没错,就是现在在跑博客的这台NAS,机器太老了。懒得升级重灌系统了,上面也没有什么特别重要敏感的数据,只是一台下载机下点电影。和放个博客发几句牢骚而已。

但比较棘手的问题是,现在各个平台免费申请的SSL证书已经普遍缩短到有效期3个月(cloudflare的方案除外),在客户的云主机上已经部署好了auto-cert / certbot 之类的脚本,但这些脚本有一个问题,依赖的 openssl centos6已经停止更新了不支持会失败。

不卖关子,解决方法请出了 deepseek,给我推荐了 acme.sh,绕过了诸多问题和限制

- 阅读剩余部分 -

因为阿里云和腾讯云调整了免费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验证失败