使用 https, 并将 WWW 跳转到 NON-WWW

0x01: 背景

博客经常不更新,服务器还时不时挂掉一次,导致 PageRank 基本是负的了,不过技术上要跟的上更新啊! 微信小程序接口必须是 https, 这次就当是练手了。

0x02: 整体思路流程

  1. 确保自己的域名解析全部是 A 记录
  2. 使用 Let’s Encrypt 证书, Certbot 安装证书
  3. 使用 Crontab 自动 Renew 证书
  4. 配置 Nginx ,SSL Server
  5. 将 HTTP 跳转到 HTTPS , 将 WWW 跳转到 NON-WWW
  6. 用检测工具检测一下自己 HTTPS 的评级

0x03: 检查自己的域名解析是否是A记录

刚开始使用 Certbot 安装证书的时候,老是报错,经过搜索发现,原来自己的域名有 CNAME 解析的。 所以在安装证书钱,请确保自己的域名都是A记录解析

0x04: 使用免费的 Let’s Encrypt 证书

关于免费的证书,这里有其他选项可供选择:

根据 Lets’ Encrypt 官网说明,我们使用推荐的 Certbot 安装我们的证书。 当然你也可以选择 acme-tiny 来安装证书。
我的服务器环境是 CentOS 7Nginx/1.10.1, 这里强烈推荐大家将Nginx 升级到最新的版本,新版本在SSL配置上比较省事。

1
2
3
4
5
//安装Certbot
sudo yum install certbot
//安装命令很简单, -w 后面跟网站根目录, -d 就是你要添加证书的域名,如果有多个域名,多个-d就可以了
certbot certonly --webroot -w /var/www/example -d example.com -d www.example.com

如果顺利,他会提示出安装成功,证书会保存在 /etc/letsencrypt/live/example.com/ 里面。

0x05: 使用 Crontab 定时Renew 证书

因为是免费证书, 所以有一个有效期是90天,到期之后需要 Renew 一下。 官方推荐是每天检查用任务 Renew 两次,因为如果证书没过期,他就只是检测一下,并不会做其他操作。这里我们设置的定时任务是每天检查一次。

1
2
3
4
5
6
$ crontab -e
10 6 * * * certbot renew --quiet
//列出任务看看是否添加成功
$ crontab -l

Read More

NodeJS和NW通过ffi调用dll/so动态库

0x01:使用的 npm 包

首先要安装 node-gyp, 用来重新编译依赖包。

1
npm instal -g node-gyp

然后主要用到下面三个包:

  • node-ffi – 使用Javascript调用动态库

  • ref – 用来定义数据类型,提供指针功能

  • ref-array – 用Buffer来实现C语言中的 array 数据类型

1
2
npm install ffi //这个命令会同时安装上 refref-struct
npm instal ref-array

Read More

Mac安装memcached,解决Unable to initialize module 问题

使用Homebrew安装 memcached 服务端

1
2
brew search memcached
brew install memcached

使用Homebrew安装 php-memcached 扩展

1
2
brew install memcached
brew install homebrew/php/php56-memcached --build-from-source

启动并检查扩展是否正差

1
2
memcached -d -m 24 -p 11211
php -i | grep memcached

排查错误

如果php -i | grep memcached 并没有返回 memcached 的信息,那么打开php的错误log,
检查是否有这个warning

1
2
3
Warning: PHP Startup: memcache: Unable to initialize module
Module compiled with build ID=API20131226,NTS
PHP compiled with build ID=API20131226,NTS,debug

解决办法很简单, 是需要再安装扩展的时候跟上 --build-from-source 参数即可。

1
2
3
4
5
6
#先卸载
brew remove php56-memcached
rm -rf /usr/local/etc/php/5.6/conf.d/ext-memcached.ini
#再安装
brew install homebrew/php/php56-memcached --build-from-source

阿里云VPS搭建自己的的Hexo博客

1. 博客的架构

先搞明白Hexo博客从搭建到自动发布的架构,才能更好的理解我们每一步进行的操作。
不然只跟着步骤过了一遍,却不知道为什么这么做。

首先看这张架构图:
Hexo-Structure

整个流程就是本地将 *.md 渲染成静态文件,然后Git推送到服务器的repository,服务器再通过 git-hooks 同步网站根目录。

Read More

数据库及迁移规范

1. Migrations 起名规则

表名_动作_字段, 动作包括 create, add, delete ,alter。 这样起名的好处是,比较好查找一个表的改动。

如果改变了多个字段, 仅需要写其中一个字段的名称即可。

1
[table_name]_[action]_[column]

示例:

  1. 增加一个example_table 表,因为他没有影响字段,则命名为:

    1
    example_table_create
  2. example表中添加一个字段 user_name, 命名为:

    1
    example_table_add_user_name
  3. 修改 example_table 表中的 user_name , 命名为:

    1
    example_table_alter_user_name

Read More

Mac上安装Nginx+PHP5.6+MySQL+NodeJS+Express

1. 安装Homebrew

如果已经安装,请跳到下一步

HomebrewOSX 上注明的软件包管理器, 可以方便的安装很多常用软件。安装过程很简单,运行一下命令即可。

1
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安装完毕以后,由于Homebrew可以能会做一些编译的事情,所以需要安装command line tools, 我用的是 10.8.5 Mountain Lion,请在apple的开发者下载中心(https://developer.apple.com/downloads/)选择自己对应的版本进行下载安装。

brew(意为酿酒)的命名很有意思,全部都使用了酿酒过程中采用的材料/器具,名词对应以下的概念:

  • Formula(配方) 程序包定义,本质上是一个rb文件
  • Keg(桶)程序包的安装路径
  • Cellar(地窖)所有程序包(桶)的根目录
  • Tap(水龙头)程序包的源
  • Bottle (瓶子)编译打包好的程序包

最终编译安装完毕的程序就是一桶酿造好的酒, 更多内容请查看官方“酿酒文档”

Read More

产品狗刚入门时的容易犯错的小事

测试要点

  1. 登录注册功能,要加强力度测,测试非法注册,高频登录
  2. 网页的 Favicontitlekeywordsdescription
  3. 所有图片和链接的alttitile
  4. 输入框在没有输入和输入非法字符的测试
  5. 所有链接的正确性,保证跳转到正确的页面
  6. 设计到js组件的测试要考虑极限情况,比如轮播图最开始和最尾的事件响应

Read More

生活总是莫名其妙

生活真是各种起承转折,懒懒散散准备好入职资料,洗掉脏衣服迎接新工作的时候,被电话告知“您明天不用来了”。

脑子一瞬间放空,然后本能的不失逼格的回一句“明白,再见”。

这生活的幽默把我玩大了,来电时间是下午1:31,而我在1点的时候放弃了原本2:00的一个面试。

挂掉电话,喊不出来,只感觉压抑,一股绝望般的情绪夹杂着疲倦将我击蒙。感觉房间里忽然很灰暗,越是在黑暗中,越有对光的渴望。

我不能就这么放弃,拿好简历穿上衣服打的去。出租车上阳光这么好,风这么舒服,司机虽然走了远路,我想即使面试不成功,也当是散心了。

还好他们没有因为时间原因责备我,做完测试题,和平台经理的面试过程让我感觉一切都是天意。

Read More

等风来

一向文采翩翩的我好久不写东西,居然不知道从何说起

将《等风来》看了两遍,感觉自己很像程羽蒙,自诩不凡,想一直跑着冲着就能飞起来。

跑了好久,到不知道为什么跑的这么急,这么慌,怕跑慢了我就老了,就没法趁年轻疯狂了。

装着理想,还要看着房价,当自己疯着狂着度过这一年的时候,银行卡的数字总是很孤单。

知乎上看到一个问题,你什么时候感觉自己很穷。

前两天回烟台宿舍小party的时候有件小事忽然让我感觉自己很穷。

Read More

Git reset和revert的区别

两者的说明

  • git reset 重置
  • git revert 撤销

从字面上理解,重置是不管你做了多少次commit,一次性就撤回去了。

撤销的话,只能撤销某一次的commit

譬如,

commit-1, commit-2, commit-3, commit-4

运行 git reset --HARD HEAD~2

重置到倒数第三个状态 ,那么还剩

commit-1, commit-2

运行 git revert HEAD~2

撤销倒数第二个状态, ,就是删除 commit-2,那么还剩

commit-1,commit-3,commit-4

Read More