Rat's

一个极简的HTTP Server: Caddy一键安装脚本,带网站配置教程
说明:这几天一直在看逗比根据地,发现Caddy很是强大,是一个极简的HTTP服务器,支持HTTP/2静态网页服务器...
扫描右侧二维码阅读全文
11
2017/11

一个极简的HTTP Server: Caddy一键安装脚本,带网站配置教程

说明:这几天一直在看逗比根据地,发现Caddy很是强大,是一个极简的HTTP服务器,支持HTTP/2静态网页服务器,安装也很快,在很多方面都可以不用安装时间很长的lnmplamp环境了,配置文件也很简单,同时还有一些有趣的扩展,可以非常方便的搭建一个HTTP服务器。

安装

系统要求:CentOS 6+/Debian 6+/Ubuntu 14.04 +。推荐Debian 7 x64

本脚本只是一个一键安装+运行控制的脚本,没有其他管理虚拟主机等功能。

执行下面的代码安装Caddy,如果想要安装其他扩展可以把名字加到命令后面(bash caddy_install.sh install xxx,xxx,xxx,扩展列表点击查看)。

wget -N --no-check-certificate https://raw.githubusercontent.com/iiiiiii1/doubi/master/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh
#备用地址
wget -N --no-check-certificate https://www.moerats.com/usr/shell/Caddy/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh

使用说明

启动:/etc/init.d/caddy start
停止:/etc/init.d/caddy stop
重启:/etc/init.d/caddy restart
查看状态:/etc/init.d/caddy status
查看Caddy启动日志:tail -f /tmp/caddy.log
安装目录:/usr/local/caddy
Caddy配置文件位置:/usr/local/caddy/Caddyfile
Caddy自动申请SSL证书位置:/.caddy/acme/acme-v01.api.letsencrypt.org/sites/xxx.xxx(域名)/

升级Caddy或者更新扩展

只需要重新执行你当初安装时候用的命令即可,会覆盖安装最新的Caddy+扩展。

卸载Caddy

卸载不会删除虚拟主机的内容,只会删除Caddy自身和配置文件。

wget -N --no-check-certificate https://raw.githubusercontent.com/iiiiiii1/doubi/master/caddy_install.sh && bash caddy_install.sh uninstall
#备用地址
wget -N --no-check-certificate https://www.moerats.com/usr/shell/Caddy/caddy_install.sh && bash caddy_install.sh uninstall

网站配置文件

配置文件为Caddyfile,列举几种caddyconf的写法

1、本地访问80

:80

2、单网站访问

example.com
root /usr/local/caddy/www
//更多模块

2、多网站

example.com {
  gzip
  root /usr/local/caddy/www
  //更多模块
}

常用基本组成模块,均写入到conf站点配置中。

#log日志
log /usr/local/caddy/www/example.log

#目录访问
browse

#gzip压缩
gzip

#自主ssl证书
tls /path/ssl/example.com.crt /path/ssl/example.com.key

#访问口令认证(用户emiria,密码abc123)
basicauth / emiria abc123

#跳转功能
redir http://example.com{uri}

#自定义错误页面
errors {
    404 404.html
    500 /usr/local/caddy/www/500.html
}

例如,通过IP80端口访问目录:

:80 {
     root /usr/local/caddy/www
     gzip
     browse
    }

也可以直接执行命令写入,以下是一个命令,直接复制粘贴即可。

echo ":80 {
 root /usr/local/caddy/www
 gzip
 browse
}" > /usr/local/caddy/Caddyfile

更多配置参考:https://caddyserver.com/tutorial/caddyfile
设置文档参考:https://caddyserver.com/docs

常见问题

1、Caddy启动失败,打开ip访问地址显示的是 It works !
一些系统会自带apache2,而apache2会占用80端口,导致Caddy无法绑定端口,所以只要关掉就好了。

netstat -lntp
# 我们可以通过这个命令查看是不是被其他软件占用了80端口。

不过apache2会默认开机自启动,如果不需要可以关闭自启动或者卸载apache2

停止Apache2

# CentOS系统
/etc/init.d/httpd stop
# Debian/Ubuntu系统
/etc/init.d/apache2 stop
 
# 尝试使用上面代码关闭,如果没效果或者提示什么错误无法关闭,那就用下面这个强行关闭进程。
kill -9 $(ps -ef|grep "apache2"|grep -v "grep"|awk '{print $2}')

取消开机自启动

# CentOS 系统
chkconfig --del httpd
# Debian/Ubuntu 系统
update-rc.d -f apache2 remove

卸载Apache2

# CentOS 系统
yum remove httpd
# Debian/Ubuntu 系统
apt-get remove --purge apache2

关闭Apache2后,就可以尝试启动Caddy,并试试能不能打开网页。

/etc/init.d/caddy start

2、启动Caddy后,无法访问
这个可能是防火墙的问题,开放防火墙端口即可。

iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 端口 -j ACCEPT
iptables -I INPUT -m state --state NEW -m udp -p udp --dport 端口 -j ACCEPT
 
# 删除防火墙规则,内容一样把 -I 换成 -D 就行了:
iptables -D INPUT -m state --state NEW -m tcp -p tcp --dport 端口 -j ACCEPT
iptables -D INPUT -m state --state NEW -m udp -p udp --dport 端口 -j ACCEPT

3、SSL证书签发失败
比如报错acme: error: 400 :: urn:ietf:params:acme:error:connection :: Error getting validation data, url:,检查下防火墙端口,需要开启80443端口,然后重启即可。

Vultr新用户注册送100美元/16个机房按小时计费,支持支付宝,【点击查看】。
最后修改:2020 年 12 月 23 日 04 : 46 PM

发表评论

76 条评论

  1. xfxy

    你好博主,最近我发现一个问题,用了这个脚本后网站运行正常,但是/.caddy/acme/acme-v02.api.letsencrypt.org 里面没有证书了,只有个user文件夹,文件夹里面是个.key文件。我换了好几个vps和域名,用这个脚本都是这样。找不到sites那些了。不知道是怎么回事。有空的话能不能请你看一下。那些.pem和.crt到底去哪了

    1. xfxy
      @xfxy

      我现在改用certbot申请证书了

      1. Rat's
        @xfxy

        应该在这个文件夹~/.caddy/acme/acme-v02.api.letsencrypt.org/sites

  2. ffhv

    你好博主 caddy v2出来了好像v1的所有脚本都不能用了 咋办

    1. Rat's
      @ffhv

      先看看官网文档的v2,我有空整个v2脚本

      1. 小白two
        @Rat's

        大佬整出来了吗 ,最近用v1 遇到了点问题,v2是正常的,看起来v1 慢慢有些过时了

        1. Rat's
          @小白two

          还没,v2比v1简单很多,不过v1能用的话,还不算过时

  3. yyy

    [root@zephyr CTList]# wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubiBackup/doubi/master/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh
    --2020-07-25 02:06:20-- https://raw.githubusercontent.com/ToyoDAdoubiBackup/doubi/master/caddy_install.sh
    Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.0.133, 151.101.64.133, 151.101.128.133, ...
    Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.0.133|:443... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 5609 (5.5K) [text/plain]
    Last-modified header missing -- time-stamps turned off.
    --2020-07-25 02:06:20-- https://raw.githubusercontent.com/ToyoDAdoubiBackup/doubi/master/caddy_install.sh
    Reusing existing connection to raw.githubusercontent.com:443.
    HTTP request sent, awaiting response... 200 OK
    Length: 5609 (5.5K) [text/plain]
    Saving to: ‘caddy_install.sh’

    100%[=================================================================>] 5,609 --.-K/s in 0s

    2020-07-25 02:06:20 (15.4 MB/s) - ‘caddy_install.sh’ saved [5609/5609]

    --2020-07-25 02:06:20-- https://caddyserver.com/download/linux/amd64?license=personal
    Resolving caddyserver.com (caddyserver.com)... 165.227.20.207, 2604:a880:2:d0::21b0:6001
    Connecting to caddyserver.com (caddyserver.com)|165.227.20.207|:443... connected.
    HTTP request sent, awaiting response... 404 Not Found
    2020-07-25 02:06:20 ERROR 404: Not Found.

    gzip: stdin: unexpected end of file
    tar: Child returned status 1
    tar: Error is not recoverable: exiting now
    [错误] Caddy 解压失败或压缩文件错误 !

    一直是这样不知道为啥,哎

    1. Rat's
      @yyy

      好像caddy2出来了,caddy1直接下载不了了。

      1. ChangWeiCat
        @Rat's

        大佬那要怎么搞啊

        1. Rat's
          @ChangWeiCat

          可以先看看caddy官方网站,脚本安装和使用都有,用谷歌浏览器翻译看看,很好理解

  4. KKOS

    Cannot reach homeserver
    Ensure you have a stable internet connection, or get in touch with the server admin

  5. Howie Hoo

    2019/09/25 16:21:35 failed to obtain certificate: acme: error: 429 :: POST :: https://acme-v02.api.letsencrypt.org/acme/new-order :: urn:ietf:params:acme:error:rateLimited :: Error creating new order :: too many failed authorizations recently: see https://letsencrypt.org/docs/rate-limits/, url:

    这样的怎么解

    1. Howie Hoo
      @Howie Hoo

      取消ssl之后日志显示可以正常跑起来,但是访问还是502
      Activating privacy features... done.
      Serving HTTP on port 4444
      http://xxx.xxx:4444

      端口都是打开了的

      1. Rat's
        @Howie Hoo

        最上面的错误应该是证书签发太频繁,被限制了,502那个配置你没给,就不太清楚

        1. 三少
          @Rat's

          我的也是报429错,这个怎么解决?

          1. Rat's
            @三少

            报错一样的话,那就是签发被限制,需要等几天才能解除,目前的解决方法就是使用自己签发的证书,或者去掉签发的那行tls代码

        2. Howie Hoo
          @Rat's

          502搞定了,重启之后caddy没有自动启动,导致的。证书签发要什么时候才能解除限制

          1. Rat's
            @Howie Hoo

            要几天好像,具体还不清楚

  6. Freezerburn

    博主你好,我这边caddy启动失败,报错提示failed to obtain certificate: acme: error: 400 :: POST :: https://acme-v02.api.letsencrypt.org/acme/new-order :: urn:ietf:params:acme:error:rejectedIdentifier :: Error creating new order :: Policy forbids issuing for name, url:
    以下是caddyfile的内容:
    xxxx.com {
    root /usr/local/caddy/www
    tls xxxx@xxx.com
    gzip
    }
    ext .html
    errors error.log {
    404 error-404.html
    }
    fastcgi /blog localhost:9000 php
    proxy /api localhost:5001 localhost:5002

    请问这种情况该怎么解决?

    1. CatMeow
      @Freezerburn

      xxxx.com {
      root /usr/local/caddy/www
      tls xxxx@xxx.com
      gzip
      ext .html
      errors error.log {
      404 error-404.html
      }
      fastcgi /blog localhost:9000 php
      proxy /api localhost:5001 localhost:5002
      }

    2. Rat's
      @Freezerburn

      你这个配置是全的?全的话格式貌似有问题

      1. Freezerburn
        @Rat's

        我也不太清楚配置的问题,因为最近也是刚开始试着用caddy,有一些地方还是不太明白,请问这个问题有没有什么解决方法。

        1. Rat's
          @Freezerburn

          你要什么程序的配置文件,你这个好像是配合了php

          1. Freezerburn
            @Rat's

            现在只是想用caddy加载quic协议给特定网址开服务,再与纯用nginx的网页加载速度做一个对比而已,但是现在运行caddy -quic就出错,用最简的配置似乎也不行。

  7. LYM

    /usr/local/caddy/Caddyfile: line 1: $'gzipr': command not found
    /usr/local/caddy/Caddyfile: line 2: rewrite: command not found
    /usr/local/caddy/Caddyfile: line 3: $'r': command not found
    /usr/local/caddy/Caddyfile: line 8: syntax error near unexpected token `}'
    /usr/local/caddy/Caddyfile: line 8: `}'
    这个???

    1. Rat's
      @LYM

      格式不对。

  8. LYM

    Caddy 使用命令:/usr/local/caddy/Caddyfile
    日志文件:cat /tmp/caddy.log
    使用说明:service caddy start | stop | restart | status
    或者使用:/etc/init.d/caddy start | stop | restart | status
    [信息] Caddy 安装完成!

    root@ns4bo:~# /etc/init.d/caddy status
    [信息] Caddy (PID 1298) 正在运行...
    root@ns4bo:~# /usr/local/caddy/Caddyfile
    -bash: /usr/local/caddy/Caddyfile: No such file or directory
    root@ns4bo:~# ./caddy
    -bash: ./caddy: No such file or directory

    1. Rat's
      @LYM

      检查下配置文件,看你建立了没

  9. LYM

    caddy显示正在运行。但是没有Caddyfile文件。。。caddy文件夹都没有有。。导致伪静态设置不了-_-||

    1. Rat's
      @LYM

      这个配置文件需要自己建立一个

      1. LYM
        @Rat's

        emmmmm所以伪静态的规则有什么推荐的?

  10. kitty

    博主,请问怎么设置 反向代理全站啊,按照目前的caddy教程,只能反代首页,二级页面就会跳回原网站。。。。

    1. Rat's
      @kitty

      这个我还没仔细研究过,你先看下官方文档

      1. kitty
        @Rat's
        该评论仅登录用户及评论双方可见
      2. kitty
        @Rat's

        望楼主闲暇之余研究一下,小白看不懂。。。