疯了。。

一定有什么我没有注意到的地方!

折腾时间 -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 foundhttps://访问的时候也是。

这时候我这个菜鸟就开始纠结了。

是不是跟我自定义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.com301到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

我有些头晕了。

先不折腾了,我得缓缓。什么鬼啊!