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,默认给你们安装了filemanager扩展(在线文件管理器/私人网盘),如果想要安装其他扩展可以把名字加到命令后面(bash caddy_install.sh install xxx,xxx,xxx,扩展列表点击查看)。

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

使用说明

启动:/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/ToyoDAdoubi/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

原文地址:Go语言 跨平台支持的极简 HTTP Server —— Caddy一键安装脚本

需要Office365 E3 MSDN 25的可加入萌咖杂货店QQ群购买→【点击加入
最后修改:2017 年 11 月 12 日 12 : 37 PM

发表评论

23 条评论

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

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

  2. 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去掉。

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

  4. snoweagle

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

  5. snoweagle

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

  6. snoweagle

    caddy 怎么做thinkphp5 rewrite

    1. Zvonimir
      @snoweagle

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

      1. Rat's
        @Zvonimir

        好东西,感谢提供。

    2. Rat's
      @snoweagle

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