新兴的web服务器caddy

caddy 是一个像 Apache, nginx, 或 lighttpd 的web服务器。 你要问nginx已经很好了,为什么要用caddy呢? 我觉得caddy最大的特点是用起来简单, 然后呢,它还有下面这些开箱即用的特性: HTTP/2 全自动支持HTTP/2协议,无需任何配置。 Auto HTTPS Caddy 使用 Let’s Encrypt 让你的站点全自动变成全站HTTPS,无需任何配置。当然你想使用自己的证书也是可以的。 Multi-core 因为caddy是golang写的,所以当然可以合理使用多核啦。 IPv6 完全支持IPv6环境. WebSockets Caddy 对WebSockets有很好的支持. Markdown 自动把md转成 HTML ,当然,我后续要给大家介绍更强大的hugo来干这个事情. Logging Caddy 对log格式的定义很容易,更好的满足你日志收集的需求。 Easy Deployment 得益于go的特性,caddy只是一个小小的二进制文件,没有依赖,很好部署。 那么在什么场景下适合尝试使用caddy呢,我推荐从以下场景开始: 作为静态页面的webserver 转发 fastcgi 请求到 php-fpm 服务,比如替换apache或nginx作为wordpress的server 反向代理,管理多个站点 微服务的 API gateway ,我会专门写一篇文章。 有些在nginx上难以开发的需求,为caddy写插件太方便了。 入门 安装caddy 下载 caddy 把caddy放到系统的PATH中,让其可以直接执行。比如Linux中一般习惯放到 /usr/local/bin 简单测试 找一个做测试的临时目录,生成一个测试主页。echo "hello world">index.html 执行 caddy 在另一个终端 curl localhost:2015 或在浏览器访问 (http://localhost:2015) Caddyfile caddy的一个特色就是配置简单,nginx的配置文件群已经越看越晕了。我们来试试: 在当前目录创建这样一个叫Caddyfile的文件: localhost:2020 gzip 这次,我们改变了端口,并且启用了gzip自动压缩数据。运行caddy,去你指定的地址看看吧。 ...

2017年3月12日 · 1 分钟 · Hyacinthus

switch to hugo

我从04年开始写博客 最开始是在 blogger,我是 google fans 嘛。 自己买了域名绑定上去,后来被墙了,又研究了反向代理。 感谢gfw让我第一时间就接触了nginx,远在它流行之前。 后来 GAE 刚出来,很为 google 的云计算平台激动。 我找了个叫microlog的部署在GAE的博客。 刚好还是用我爱的python写的,没事了学习一番。有什么问题也能小改一下。 GAE也让我第一时间就接触了PAAS的云服务,可惜这么多年过去了,IAAS和SAAS都很普及了, PAAS依然不温不火,我估计很多人是担心PAAS 大家也可以看到,这个项目在2011年就不维护了。 那个时候可能用这个博客的人引起了某些注意,开始有大量的广告留言。 我于是转到了著名的wordpress,这个技术博客也是那时候另开的。 很多朋友都自己写一个博客程序,作为练手。 我没有那样做,有时间的话,我还有更多有意义的程序去写。 wordpress其实挺好的,一直在维护,功能完善,生态丰富。 想要写作,是足够了。 我们很有必要把写程序和写博客分清楚。 很多人写出来一个博客程序,却再也不在上边记日志了。 用wordpress的日子里,搬过好几次地方。 最开始是在国内的一个虚拟主机 后来在v2ex被安利了linode,于是买了一个linode 我并没有在大家都去digital ocean的时候再转投 用了四五年后,linode虽然厚道,经常免费升级配置。 可是依然顶不住墙的威力,越来越慢,有时还会被波及需要换IP。 于是又重新在国内备案,转回了国内。 用wordpress后有一段时间微博很火。 我想把博客同步发在微博上。 开始自己写了个微博的第三方应用。 后来顶不住接口经常变,用了多说。 再后来我就不上微博了,直到多说开始有很多垃圾广告过滤不掉, 也弃用了多说。 再后来,我回西安,变得很忙。 很惭愧,没怎么分享技术。 这时开始流行静态博客。 Jekyll , Hexo ,等。 我研究了一阵子,但并没有折腾。 我想有那时间我还不如多写两篇blog– 虽然其实并没有写。 最近,我反思了自己,觉得自己有时瞎忙。 我会督促自己,抽出来一些时间, 整理自己正在研究的知识,分享出来。 现在我要分享更成体系一点的东西。 而不是原来少是解决一些奇怪的工具问题。 进入golang的世界之后,我发现了很多宝藏。 在发现caddy之后,我看到了nginx被革命的先兆。 把自己的 webserver 换到 caddy 自动 http2 ,自动 https ,好酷。 然后又折腾了很久 wordpress 全站 https 化。 ...

2017年3月9日 · 1 分钟 · Hyacinthus

弃用多说

今天发现有人留言, wordpress 系统有收录但是多说没有。 可显示留言是多说负责的,于是没有显示。 于是我想了一下为什么用多说。 是因为之前用它的同步到新浪微博的功能。 可我已经放弃使用新浪微博两年多了。 而多说带来的只有各种问题。 最烦恼的就是垃圾过滤的很差。 整天有大量的广告。 wordpress + Akismet 反而没这个问题。 于是很干脆的就把多说卸载掉啦。 顺便反思了一下, 对于依赖别的平台的产品,一定要见风使舵, 依赖的平台衰落了,就赶紧跳船吧。 最近还是微信这个船比较大。

2016年6月7日 · 1 分钟 · Hyacinthus

wordpress安装插件时提示要ftp认证信息

本来按照官方的说法 把wordpress放在一个root的公共目录下完全没什么问题 但是我考虑到有可能一个机器好几个实例 就把文件放在普通用户下了 然后改了改权限 可以运行了 然后就碰到了不能升级不能安装插件的问题 因为服务器设置了只能用key登陆嘛 认证那个页面虽然能填key但是怎么都不对 FTP当然是不会用了 都没装 我就开始改权限 开始走了弯路 研究了半天nginx的权限 最后发现 只要php-fpm的进程对那个wordpress目录有写权限就可以 php-fpm在ubuntu里默认用www-data用户的 甚至不用管nginx的用户和权限

2015年3月10日 · 1 分钟 · Hyacinthus

wordpress被黑了

话说从上周开始我的博客风如夏花开始被google报有恶意软件 于是chrome和firefox打开都会悲剧 我检查了一圈页面 并没有发现异常 于是很忧愁 总要做点什么 首先我换了空间 从一个虚拟主机换到了我的一个VPS 直接改用nginx做容器 然后换了域名的DNS Server 换成了cloudflare 然后重新提交审核 没用 我又怀疑是cloudflare的问题 关掉CDN功能 提交审核 没用 于是我怀疑我什么地方检查漏了 就又下载了一份最新的wordpress 只把旧的配置和upload文件夹移过来 重新审核 没用 众所周知 google什么都用机器做 根本没人管这些事 所以也完全没地方问 我越来越怀疑google的机制出了什么问题 可经过一个礼拜的煎熬后 才发现google诚不余欺 太厉害了 今天我又在绝望中打开唯一一直存在的文件 wp-config.php看了一下 里边竟然有一段eval()包裹的base64加密代码 不得不说 隐蔽性太强了 首先一般的人访问 页面都一切正常 让人无从怀疑 只有搜索引擎访问的时候它才暴露恶意页面 其次 这个文件很有用 也不会轻易被覆盖掉 最后 它的代码还是加密的 在内容里搜索都搜索不到 现在虽然还没有再次审核我的网站 不过相信很快就会好了 希望遇到同样问题的人能搜到我的这篇文章 我就粘一些中英文的关键词 以便能被搜索到 This site may harm your computer. Google has discovered harmful code on your site and will display a warning to users when they attempt to visit your pages. ...

2012年4月17日 · 1 分钟 · Hyacinthus

blogger导入wordpress后恢复permalink

blogger导入wordpress官方就提供有插件 但是倒入后每篇文章的链接就变了 之前搜索引擎搜索出来的结果 点就去就是404无法找到 以下两步可以修复这个问题 首先 在wordpress里配置permalink为custom 填写成这样 /%year%/%monthnum%/%postname%.html 然后 新建一个php文件 把下面的代码复制进去保存 上传到服务器上 执行这个文件 它会把postname替换成之前blogger上的 <?php require_once('wp-load.php'); $res = $wpdb->get_results("SELECT post_id, meta_value FROM $wpdb->postmeta WHERE meta_key = 'blogger_permalink'"); $wpdb->print_error(); foreach ($res as $row){ $slug = explode("/",$row->meta_value); $slug = explode(".",$slug[3]); $wpdb->query("UPDATE $wpdb->posts SET post_name ='" . $slug[0] . "' WHERE ID = $row->post_id"); $wpdb->print_error(); } echo "DONE"; ?> 好了 大功告成

2011年6月24日 · 1 分钟 · Hyacinthus