Caddy Server - redir 跳转
疯了。。
一定有什么我没有注意到的地方!
折腾时间 -2
redir https://newsite.com{uri}
上面一行的命令,用于直接跳转,默认是301
永久重定向的。
site.com {
redir https://newsite.com{uri}
}
向上面那样子写Caddyfile配置文件,很遗憾的告诉你,没有一点效果。你打开site.com
看不到任何东西,网页无法正常运作
。
是不是跟域名没有解析过来有关系?官方文档中说site.com
这样,端口是443
,事实上好像就是这样。我用https://site.com
打开提示证书错误。
解决方法看起来应该是设置证书:
- 方法一:启动
caddy
的时候加上参数-email admin@onebox.site
; - 方法二:或者Caddyfile中,指定
tls admin@onebox.site
; - 方法三:或者用自己的证书,
tls ../crt ../key
。
好的,那我这么写:
site.com {
tls /home/ssl/site.com.crt /home/ssl/site.com.key
redir https://newsite.com{uri}
}
浏览器中打开http://site.com
的时候提示错误:No such site at :80
;打开https://site.com
的时候,还是错误No such site at :443
。我本以为我问题已经想清楚了,可还是被Caddy给打败了!
Caddy官方下面的这句话是什么鬼?
example.com # Host: example.com, Port: 443
折腾时间 -3
有BUG是正常的嘛!继续折腾!
既然上面的site.com
这个主机头,默认既不是80
端口,也是443
端口,那我换个方法指定端口OK?!
https://site.com {
tls /home/ssl/site.com.crt /home/ssl/site.com.key
redir https://newsite.com{uri}
}
http://site.com
,错误提示:No such site at :80
;什么玩意嘛,不是能自动转到https
的么!https://site.com
,哇,跳转成功!
看起来要分开设置?
折腾时间 -1
没有指定端口的话,貌似很简单,如果设置了TLS
,Caddyserver貌似自动从80
端口跳转到443
,这时候只要设置一下从non-www
跳转到www
(或反过来),其他的折腾的就很少了,只要考虑是否是301
转向。
redir https://newsite.com{uri}
官方redir文档里有上面的一句,就是普通的跳转,然后有个如下的示例:
redir [code] {
from to [code]
}
把示例填好:
redir 301 {
/ https://newsite.com{uri}
}
这应该就是传说中的301跳转了吧。
[code]
可以是[300-308],除了306。
然后我又注意到了这么的一句:
The default status code is 301 Moved Permanently.
然后!我不是白折腾了么!!还是乖乖的用redir https://newsite.com{uri}
吧!
可是,当我用如下配置文件做跳转的时候:
newsite.com {
tls /home/ssl/newsite.com.crt /home/ssl/newsite.com.key
redir https://www.newsite.com{uri}
}
www.newsite.com {
root /home/wwwroot/newsite.com
...
tls /home/ssl/newsite.com.crt /home/ssl/newsite.com.key
...
...
}
问题就出现了,好像什么都没有生效。
跟redir
之前设置的tls
有关系吗?那我就删掉它再试一次,Caddyfile配置如下:
newsite.com {
redir https://www.newsite.com{uri}
}
www.newsite.com {
root /home/wwwroot/newsite.com
...
tls /home/ssl/newsite.com.crt /home/ssl/newsite.com.key
...
...
}
访问newsite.com
的时候浏览器提示不信任(因为我域名解析没弄过来,Automatic HTTPS
应该是没有生效的),恩,继续访问,恩?还是提示不信任,好像跳转了回来,一直如此循环。
访问http://www.newsite.com
,提示找不到80端口,还是80端口下没有什么东西Not found
;https://
访问的时候也是。
这时候我这个菜鸟就开始纠结了。
是不是跟我自定义tls
有关?待会再试试这个。
算了,还是先指定端口:
newsite.com:80, www.newsite.com:80 {
redir https://www.newsite.com{uri}
}
newsite.com:443 {
tls /home/ssl/newsite.com.crt /home/ssl/newsite.com.key
redir https://www.newsite.com{uri}
}
www.newsite.com:443 {
root /home/wwwroot/newsite.com
...
# tls yours@mail.com
tls /home/ssl/newsite.com.crt /home/ssl/newsite.com.key
...
...
}
上面的是生效的。
那么问题来了,我是因为Caddyserver简单,所以才用的。搞来搞去这么麻烦我还不如用回Nginx呢!
简单是因为把更多的功能实现让程序自动完成,对程序本身而言,要求较高。我只想吐槽一下Caddyserver还不够完善,例如类似nginx -t
的配置测试,在官方文档和caddy -h
中都没找到。
anyway,我解析个三级域名,用自动的HTTPS设置试试跳转。也就是:
3.newsite.com {
redir https://www.3.newsite.com{uri}
}
www.3.newsite.com {
root /home/wwwroot/3.newsite.com
...
tls admin@newsite.com
...
...
}
写到上面的时候我停了挺长一段时间,我想起来我在一个网站上看到,只要Caddyfile配置文件中写site.com
,Caddy会自动把www.site.com
301到site.com
,所以,我在我已经生效的Caddyfile的后面,继续来个虚拟主机配置:
3.newsite.com {
root /home/wwwroot/3.newsite.com
tls admin@newsite.com
}
已自动部署了HTTPS
。
然而https://3.newsite.com
跳转失败!呵呵,别人写的信息不一定是准确的。要不然就是Caddy Server错误太多!
我继续折腾,关闭TLStls off
试试:
3.newsite.com {
root /home/wwwroot/3.newsite.com
tls off
}
浏览器敲入3.newsite.com
显示:No such site at :80
。
我有些头晕了。
先不折腾了,我得缓缓。什么鬼啊!
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
No such site at :80 我也是被这个问题困扰了