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/ToyoDAdoubiBackup/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/ToyoDAdoubiBackup/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{url}

#自定义错误页面
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
Vultr注册就送$50,可开日本/新加坡等机房,【点击注册】。
最后修改:2019 年 01 月 08 日 07 : 40 PM
如果觉得我的文章对你有用,请随意打赏。

发表评论

56 条评论

  1. 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. Rat's
      @Freezerburn

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

      1. Freezerburn
        @Rat's

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

        1. Rat's
          @Freezerburn

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

          1. Freezerburn
            @Rat's

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

  2. 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

      格式不对。

  3. 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

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

  4. LYM

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

    1. Rat's
      @LYM

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

      1. LYM
        @Rat's

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

  5. kitty

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

    1. Rat's
      @kitty

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

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

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

  6. John Smith

    使用caddy可以在用IP访问的时候也是https吗

    1. Rat's
      @John Smith

      这个没试过,就算可以https,也是不安全,毕竟申请不了ssl证书

  7. @@

    無法啟動caddy 日誌顯示:Your sites will be served over HTTPS automatically using Let's Encrypt.
    By continuing, you agree to the Let's Encrypt Subscriber Agreement at:
    https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf
    Do you agree to the terms? (y/n): 2019/02/22 07:41:35 user must agree to CA terms

    但無法運行caddy -agree

    1. @@
      @@@

      已解決,手動進入caddy位置 ./caddy解決

  8. phil

    怎么设置自启 我无法自启

    1. Rat's
      @phil

      我应该记得这个脚本直接默认设置自启吧?

      1. phil
        @Rat's

        我安装了filebrowser 和tls 配置好重启发现caddy没自启

        1. Rat's
          @phil

          该不会我记错了吧,自启可以用最简单的方法,把/etc/init.d/caddy start启动命令添加到rc.local自启文件就行了。不会加的话,参考这个文章,https://www.moerats.com/archives/831/

  9. cody

    第一步安装 filemanager 就失败了。sad

    root@ns3055473:~# wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubiBackup/doubi/master/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh install http.filemanager
    --2019-01-07 21:53:19-- 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]
    Saving to: ‘caddy_install.sh’

    caddy_install.sh 100%[=============================================================>] 5.48K --.-KB/s in 0.001s

    Last-modified header missing -- time-stamps turned off.
    2019-01-07 21:53:19 (9.02 MB/s) - ‘caddy_install.sh’ saved [5609/5609]

    --2019-01-07 21:53:19-- https://caddyserver.com/download/linux/amd64?plugins=http.filemanager&license=personal
    Resolving caddyserver.com (caddyserver.com)... 2604:a880:2:d0::1145:e001, 138.68.240.78
    Connecting to caddyserver.com (caddyserver.com)|2604:a880:2:d0::1145:e001|:443... connected.
    HTTP request sent, awaiting response... 400 Bad Request
    2019-01-07 21:53:19 ERROR 400: Bad Request.

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

    1. Rat's
      @cody

      这个抱歉,我刚看了下,是官方删除了http.filemanager插件,导致下载失败,直接去掉后面的插件即可

      1. l
        @Rat's

        请问现在该如何安装http.filemanager,centos 7 挺急的,盼回复,谢谢。

        1. Rat's
          @l

          看这个教程,https://www.moerats.com/archives/403/,现在改名了,安装方法一样

          1. l
            @Rat's

            就是按照你链接的网站安装的,提示caddy启动失败,日志为/usr/local/caddy/Caddyfile:5 - Error during parsing: Unknown directive 'filemanager',可否加tg以便联络@ly1878

            1. Rat's
              @l

              我的锅,我没改个地方,你重新看教程,把之前配置文件里的filemanager改成Filebrowser,然后再启动

      2. cody
        @Rat's

        emm 不过去掉差价后后面caddy还能启动不,我这昨天把那插件换成了一个别的插件,安装是成功了,但是启动 caddy 失败,迷了呀

        昨天已经放弃了,突然看到你的回复,我一会儿再去弄弄,直接不加这个插件试试

        1. Rat's
          @cody

          去掉插件是可以安装的,我已经把博客里的插件安装全部去掉了

    2. Rat's
      @cody

      关掉你的ipv6就好了。

  10. dice-EA

    你好。看了你的教程在vultr上搭建了55, 顺便用caddy aria2 组建了在线下载网站,用vultr分配的IP作为
    我的网址,但是只有挂自己的搭建的55才能打开这个网站,不挂55直接打开还有用别的55都无法打开这个网站,请教一下原因,谢谢。
    配置文件如下:
    http://我的ip {
    root /usr/local/caddy/www/aria2
    timeouts none
    gzip
    filemanager /Download /usr/local/caddy/www/aria2/Download {
    database /usr/local/caddy/filemanager.db
    basicauth / usr password
    }

    1. Rat's
      @dice-EA

      你搭建55的服务器和下载用的服务器一样么?还有现在看IP有没有被墙不能只看ping,看能不能进SSH客户端就行,顺便给个规范点的配置文件你试试。
      :80 {
      root /usr/local/caddy/www/aria2
      timeouts none
      gzip
      filemanager / /usr/local/caddy/www/aria2 {
      database /usr/local/caddy/filemanager.db
      }
      basicauth / usr password
      }

      1. dice-EA
        @Rat's

        是一个服务器,可以进ssh客户端,试了你给的配置文件,还是一样只能通过自己搭建的55才能打开用网站。

    2. dice-EA
      @dice-EA

      我搭建的55可以正常工作,且我的ip可以ping通

      1. Rat's
        @dice-EA

        这种问题好像没遇到过,感觉与防火墙端口有关,你或者换个系统试试。

  11. sanwzzz

    您好。
    echo "https://xxx.xxx:7776 {
    root /usr/local/caddy/www
    tls /usr/local/caddy/ssl/xxx.xxx.crt /usr/local/caddy/ssl/xxx.xxx.key
    gzip
    }" > /usr/local/caddy/Caddyfile
    }" > /usr/local/caddy/Caddyfile启动失败,日志文件爆出': open /usr/local/caddy/ssl/xxx.xxx.crt: no such file or directory
    找不到上面提示的目录= =!请教一下Caddy不是会自动申请证书么?要自己手动放入证书的么?

    1. Rat's
      @sanwzzz

      你这个命令是需要使用自有证书,自动申请的正确命令是tls xx@xx.com,后面为邮箱。

    2. sanwzzz
      @sanwzzz

      如果不适用正式报509错误x509: failed to load system roots and no roots provided
      指教下~

      1. sanwzzz
        @sanwzzz

        get directory at 'https://acme-v02.api.letsencrypt.org/directory': failed to get json "https://acme-v02.api.letsencrypt.org/directory": Get https://acme-v02.api.letsencrypt.org/directory: x509: failed to load system roots and no roots provided
        请问是Json配置错误么?

        1. Rat's
          @sanwzzz

          系统环境问题,你升级下系统,apt -get -y update,apt-get install -y ca-certificates。centos把apt-get改成yum。

          1. sanwzzz
            @Rat's

            已成功,谢谢,应该是系统问题,Debian7换成centos6.5.

            1. Rat's
              @sanwzzz

              很多错误通过换系统基本都可以解决。

      2. Rat's
        @sanwzzz

        509错误你百度下吧,很多解决方法。

        1. sanwzzz
          @Rat's

          再次请教一个问题,400错误;
          百度之后是语法 请求错误。检查caddyfile后没发现错误。联系域名提供商说已解析完毕。
          Caddyfile:
          https://xx:7676 {
          root /usr/local/caddy/www
          tls xx@qq.com
          gzip
          }
          Log:
          Activating privacy features... 2018/05/18 19:57:37 [xx] failed to get certificate: acme: Error 400 - urn:ietf:params:acme:error:connection - Fetching http://xx/.well-known/acme-challenge/PEsKUXjiBsMZkIowqXtQ4sBjG6q28g4igs8rz6693k0: Error getting validation data

          1. Rat's
            @sanwzzz

            把你的7676去掉。

  12. ke

    你好, caddy默认 是监听2015端口,
    我Caddyfile 里设置
    ojb.* {

    root /var/www gzip

    }
    这样无法访问。。。 现在必须每次这样操作 caddy -port 2015才可以正常访问
    root@iZbp1:/etc/caddy# caddy -port 2015
    Activating privacy features... done.
    https://ojb.*
    http://ojb.*
    但是前段时间都好好的,不用设置caddy -port 2015想问下怎么解决。。

    1. Rat's
      @ke

      不需要那么麻烦,给个配置你:
      http://xx.com {
      root /var/www
      gzip
      browse
      }

  13. snoweagle

    如果看到留言,请回复邮件。谢谢大神了。

  14. snoweagle

    我的服务器用的是caddy 。。作用thinkphp5做接口开发的时候,运行接口就提示404错误。rewirte没用,请问这个怎么配置

  15. snoweagle

    caddy 怎么做thinkphp5 rewrite

    1. Zvonimir
      @snoweagle

      去这里找找,说不定有你需要的规则。
      https://github.com/caddyserver/examples

      1. Rat's
        @Zvonimir

        好东西,感谢提供。

    2. Rat's
      @snoweagle

      Caddy好像不能直接用于thinkphp5吧。