标签 nginx 下的文章

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

手贱尝试在运行frps 的主机上尝试安装BBR 修改导致系统无法重启。脑一抽 重灌了 ubuntu-18

然后才发现我在上面还跑着好几个其他应用,其中一个就是给博客转发的 frps

重新部署的时候引发大混乱
用一键部署脚本安装了 trojan (真香!) ,自带了 一个nginx。

原本以为全部流量是先渠道nginx然后做反向代理的

没想到竟然是
trojan:443 -> 反向 nginx:80

难怪在 nginx.conf 里找半天没有看到 ssl的设置,加上反向指向 frps.https 也不成功各种问题

让三个应用共享443端口可把我愁坏了。

最后的方案是

nginx:80 -> vhost反向 frp.http:非80
nginx:80 -> 默认 www
trojan: 非443 -> nginx:80
frp.https: 独占 443

终于不打架了,安逸。

再怀缅一下挂掉的服务: praysatoshi.top ... 我会尽快把你恢复的
最后的最后,舔多一口:trojan ...啊~真香。

纯技术研究,不深究行为目的。