解决从 Caddy 服务器下载文件时出现的网络错误

前几天捣鼓了一个私人网盘出来,使用过程中发现下载文件时经常失败,具体表现是刚刚开始下载时一切正常,几秒钟后突然停止,告诉我网络错误.经过一番研究后,我发现这是服务器超时时间设定的问题.解决办法很简单,在 Caddyfile 中加入:

timeouts none

重启服务器即可.

需要注意的是,不同于 Caddy 的其它配置项, timeouts 是强制应用于全局的.也就是说,假如你的 Caddyfile 类似于这个样子:

a.test.com {
    timeouts none
    #other directives
}
b.test.com {
    #other directives
}

那么 a.test.com 和 b.test.com 的超时都会被设定为 none. 就这个问题,我询问了 Caddy 作者 Matt 大神,得到的答复是,受到 Go 语言标准库的限制, 我们是没有办法为多个站点设置不同的超时的.不过这个问题在未来可能会被修复.

参考:
Caddy 官方文档
https://caddyserver.com/docs/timeouts
我在 Caddy 社区的提问
https://forum.caddyserver.com/t/network-error-when-download-file-form-server/1382

以上.

在 GNU screen 中优雅地运行 Caddy

容我先吐槽两句, Caddy 的守护运行真的是把我折腾惨了,高端的 init 工具如 systemd 之流没一个是靠谱的,浪费时间浪费生命,最后还是用 screen 解决了问题.你们说 screen 很 low, 我 tm 才不管, it just works.

但毕竟 screen 是很简陋的.那么本文就来说说怎么让 screen 也拥有退出自动重启和开机自启的功能. Continue reading

Caddy + PHP-FPM 服务器报 getsockopt: connection refused 错误的解决方法

环境: Fedora 25, Caddy 0.9.4, PHP 7.0.14.

Caddy 处理 PHP 页面的方式类似于 Nginx, 也是交给 PHP-FPM 处理.在 Caddyfile 中只需这样写:

fastcgi / 127.0.0.1:9000 php

然而无法访问 PHP 页面.检查日志后发现这样一条报错信息:

[ERROR 502 /index.php] dial tcp 127.0.0.1:9000: getsockopt: connection refused

其原因是 PHP-FPM 默认监听 /run/php-fpm/www.sock , 而非9000 端口.在 /etc/php-fpm.d/www.conf 配置文件中如此修改:

;listen = /run/php-fpm/www.sock
listen = 9000

然后重启 PHP-FPM 服务即可.

以上.