应该是一个星期之前出现的问题了,一直没时间记。今天记一下下。
前戏
由于之前的腾讯云服务器被自己搞的很脏,所以就重置了一下。
重新配服务器的时候,懒得配证书,也懒得用 Caddy Server 实现一些奇奇怪怪的功能,所以就打算使用 Nginx 在服务器搞一些本地的代理,然后使用 Cadddy Server 反代出去。这样子就不需要考虑 Caddy Server 的一些局限,又能很方便地配好证书了。
问题出现
对Hexo,使用 nginx serve static files,也就是 hexo g
出来的一堆文件,在 localhost:10001
运行,然后caddy做反代。
nginx 的配置文件:
|
|
可以看到,try_files
字段是为了解析可能是目录的一个url,如果存在这个文件则直接返回,如果不存在就当他是个目录,如过还不存在就返回404。
CaddyFile 更简单了:
|
|
但是这个时候出现了一个问题。一旦访问 https://blog.xugr.me/categories
这个url就会跳转到 http://localhost:10001/categories/
去。
问题解决
一开始认为是Caddy Server的问题,所以仔细去看proxy的文档,但是似乎没有什么发现,胡乱了例子中的预设也没有什么作用。况且例子中的proxy就是一样写的,所以感觉出问题的可能性比较小。
使用Chrome查看了到底是怎么跳转的,发现是在访问 https://blog.xugr.me/categories
的时候有一个301跳转,跳到了http://localhost:10001/categories/
。
现在才开始怀疑是自己的nginx没有配好。进而发现访问 https://blog.xugr.me/categories/
就没有问题。
终于注意到了是有没有 /
的问题。所以一切都是在 nginx 的 try_files
那里。
如果nginx认为请求的url指向的是一个目录而不是一个文件,为了保证url的一致,他会做一个跳转,到加上了 /
的url,这个时候由于是nginx作出的,所以caddy不再管了,在这里看来就是去了localhost:10001。
具体解决的话,我直接把try_files改成了这样:
|
|
这样就不会做跳转了。也许也不是一个好办法,但是浪费了太多时间,也不想管了。大概能用就好。