openwrt管理后台默认是使用uhttpd提供服务的。一段时间体验下来发现uhttpd有时会没响应,查不到具体原因,只能重启才会恢复正常。为了稳定性和强大的反向代理功能,决定在软路由上使用caddy代替uhttpd。
暂停uhttpd服务
uhttpd服务占用了80端口,需要先暂停。使用ssh登录openwrt,执行下面命令暂停uhttpd服务:
/etc/init.d/uhttpd stop
/etc/init.d/uhttpd disable
下载caddy
访问caddy官网下载最新版本的caddy,intel cpu需要下载Linux amd64
版本,额外功能模块选上aksdb/caddy-cgi/v2
。
下载后放到/usr/bin
目录下,并重命名为caddy
,并给予执行权限:
wget "https://caddyserver.com/api/download\?os\=linux\&arch\=amd64\&p\=github.com%2Faksdb%2Fcaddy-cgi%2Fv2\&idempotency\=32032912354333" -o /usr/bin/caddy
chmod +x /usr/bin/caddy
配置caddy
增加下面的配置,并放到/etc/caddy/Caddyfile
文件中:
{
order cgi before respond
}
:80 {
@notcgi {
not path /cgi-bin/*
not path /
}
redir / /cgi-bin/luci
file_server @notcgi {
root /www
}
cgi /cgi-bin/luci* /www/cgi-bin/luci {
script_name /cgi-bin/luci
# 下面这句很重要,要不然部分服务控制台会工作不正常
unbuffered_output
}
}
增加启动脚本
增加自启动脚本,并保存到/etc/init.d/caddy
中:
#!/bin/sh /etc/rc.common
START=99
SERVICE_USE_PID=1
SERVICE_WRITE_PID=1
SERVICE_DAEMONIZE=1
start() {
service_start /usr/bin/caddy run --config /etc/caddy/Caddyfile
}
stop() {
service_stop /usr/bin/caddy
}
给予执行权限:
chmod +x /etc/init.d/caddy
运行
执行下面脚本运行caddy服务,并加入到自启动中:
/etc/init.d/caddy enable
/etc/init.d/caddy start
成功启动后,就可以正常访问后台了:)