分类:技术相关

二〇一九年三月

发现已经三个月没有更新博客了。过去的这三个月发生了好多事情,让我意识到能够一直保持愤怒和好奇心是非常困难的事情。不知道是年龄大了还是事情真的太多,“精力有限”的感觉真的是一直在围绕着我。这种状态让我感到很不舒服,我需要尽快的调整一下自己了。

从15年误打误撞开始做 maimai 的魔改以来已经过去了很久,久到我甚至都很久没有放精力在这上面了。但是还是稍微做了些事情在上面。最近可以拿的出来的是我开始出售主机的替代硬盘。这也算是唯一的相对比较合法的东西。

SSD for Ringseries.点击这里可以去购买

而对于我个人来说,一月年前很忙,二月过年回来就搬家,三月份一抬头也已经过去了一大半儿了。人是越来越忙,但是碌碌无为的感觉却又越来越明晰。因为合租的家伙买了辆车,我家也基本达到了人均一辆车的水平。而我最近已经开始选择摩托车通勤了。如果算上摩托车的话人均大于一辆车,也可以说是北京高端通勤人群了。

我的通勤车,铃木 GSX250r

三月是我司的晋升季,虽然天天在完成日常工作之外还要去准备各种材料,但也不是完全埋在工作里面的。比如这个:https://post.smzdm.com/p/akmrxplk/ ,是我国一些伟大骗子制造的电子垃圾。虽说是电子垃圾,但是只要足够便宜,那就可以买回来玩一下。是的,我也跟风买了一台。昨晚拆了一下,把不能用的部分拆下来装了个台式机,准备找个机会处理掉,机箱打算上一套 itx 来跑 nas 。垃圾还没收全,那就先放几张图作为预告吧。

我收的这台成色相当不错,主板甚至一点灰尘都没有。已经跟其他的淘汰垃圾装好了。

嗯,希望讲这篇的文章不会拖太久~

一次古典互联网服务器迁移记录

严格上说,我们这一代前站长(因为现在事实上没有高活跃度会员),赶上的是 Web2.0 刚刚开始起步的那段时间。
谁能想到两三年前 PHP 已经被划作前端范畴了,而最近这一两年前端技术又这么发达了呢。
然而既然决定了保留这些互联网遗迹,那就得让他们在目前为止最好的工作状态下工作。

2007 年春,口袋根据地站长 nfopo 宣布暂时关站,同期,我们筹划成立口袋社区 Poke The BBS (当时英文名叫 Pokemon The BBS)。那时候开一个网站的成本是非常低的。互联网刚刚跨进 Web2.0 ,人人分享的平台还是每人在计算机上创建自己的网站。 CNNIC 联合国内的域名服务商推出了 1 元甚至 0 元购买 .cn 域名的活动。口袋社区最早是以 poketb.cn 作为主域名的,后来购入了同名的 .com 域名,并沿用至今。
poketb.cn whois
最早的口袋社区是 Discuz! 4.1F ,服务器是现在仍然在僵尸的梦游科技美国合租。彼时还没有智能 DNS 和 CDN 这样的高科技玩意儿,以至于现在 PTB 的代码里面还有这样的历史遗迹。
ptb 分站列表
其实后来 PTB 的命途也比较坎坷。无非就是我们比口袋根据地的站长年纪小了几分,最后大家都没有逃过高考这一关。从梦游科技迁出后, PTB 先后托管在 iFastNet 、 vultr vps 上。因为国内互联网环境日趋复杂,导致总有一些会员无法成功访问网站。这也就是导致论坛会员日趋减少的一个重要原因。
我是大概 2013 年的时候决定重新将网站开放出来的。当时的想法也比较简单,就是无论自己当年多么中二,这段记忆总还是要在的。毕竟还是一个可以向后人吹牛逼的资本:“看,你爹当年就是对这个玩意儿上瘾了” —— by liuyanghejerry
之后在潘达的帮助下我将服务器迁移到了日本的 sakura vps 。樱花当年的速度是真好,服务也比较稳定。
sakura vps
只不过美中不足的是,樱花也是个古典 vps 提供商。它们的账户甚至还需要人工去确认日本本地地址。而 vps 除了稳定之外,在性价比上更是一塌糊涂。前一年我使用单台机器承载了所有流量。这在一台双核 1G 内存的机器上来说真是个大型的挑战。要知道 MySQL + PHP-fastcgi 可是吃内存磁盘的大户。机器常常被拖得十分卡顿。于是在大概一年以前我拜托潘先生另外购买了一台同机房的 sakura 节点用于单独跑 MySQL ,并拿来做 SS 节点。
现在来看这个决策是很正确的,虽然多花了一点钱,但是可以有效承载更大的用户流量。这也为成功托管口袋双子星打下了一个良好的基础。
然后一年前接手了口袋双子星,并为其在口袋社区服务器的 php5.6 环境下运行做了大量的改动。
近几年,互联网,特别是移动互联网进一步普及,使得中国的互联网环境空前复杂。面试、考试中简单的从一台计算机 A 连接到服务器 B 这样理想的情况已经不复存在(虽然看上去还是那样的)。于是在去年晚些时候我又花了一些时间为双子、口袋社区部署了一个用于 CDN 的域名 suicune.cn 并进行了加速。
然而,还是很慢。发现原因是 sakura vps 到大陆的速度变的越来越差,于是就有了这次迁移。
这次迁移出于平衡的考虑(因为数据库节点不涉及到访问中国大陆,因此只要在日本就好),我选择了一台仍然在日本但是速度相对较好的 vps 。经过测试后有中文客服,并且速度还不错的海星云成为了我的首选。
接下来的事情就是测试一下稳定性,以决定是否继续使用了。

============2018.06.04更新。

先说结论吧:总体来说服务的稳定性没有 sakura 好。
毕竟是二道贩子嘛,比不过自建线路的地头蛇的。刚好在敏感时期,刚迁移完就发现有奇怪的问题。这次迁移之后我对 vps 本身的改动是有三个:其一,升级了 linux 内核到 4.3 ,默认开了 bbr ;其二,调整了 php5.6-fpm / php7-fpm 的编译参数,这个测试没有什么影响; 其三,测试几个小流量站点直接 Caddy – PHP ,去掉了中间的 nginx。第三条这个测试后来摘掉了,因为发现维护起来实在是太麻烦了。
总体来说还是维持 外部流量 – Caddy – Nginx – php5.6/7 – 代码 的这个逻辑。按理来说迁移应该是无感的, 因为环境配置和代码位置甚至临时文件位置都是一样的。但是依然出现了奇怪的丢包。
现在在怀疑是特殊时期导致的,等这两天过去之后再确认一下吧。

nginx前端代理导致nginx暴露监听端口问题解决

其实我还是挺想吐槽一下我国的网络管理制度的。一刀切的政策导致很多爱好者交流的地方直接就毁灭于无形之中了。比如说中华相声网,再比如更多名声更小的论坛。

中华相声网

其实这个事情很简单,在我国开论坛需要企业资质+24小时值守,这两条我我们很多爱好者性质的论坛就完全没戏。
当然有些论坛我不知道是怎么备过案的,比如某新生代,再比如某吧

算了,不扯非技术,来聊聊应付这一规定中间的一些技术难题吧。

就在前两天,我们伟大的电信网络开启了前所未有的海外网站白名单制度。不仅是在黑名单上的网站、 IP 无法访问,其他的未进行白名单备案的服务器和 IP 也只能有限的访问 22 80 443 这几个端口(经过实测有些灰色 IP 比如本机甚至只能访问 443 端口)。这就逼着我把拖延症拖了快一年的全站升级 https 的事情放上议程。

经过花花的推荐,我选择了 Caddy 对 Nginx 外面包裹一层的方法来解决这个问题。

小课堂:
Caddy是个用 Go 语言开发的轻量级 http 服务器,特点是内置了全自动续命 续期的 Let’s Encrypt 服务。而后者是有效期较短的免费 https 证书服务,旨在进一步提高互联网的安全等级,最重要的还是免费。

于是按照教程写了一万个 redirect 和 https 域名适配,之后发现一个很严重的 bug 。

根据这位仁兄博客的说法,具体的问题是:

但是访问子目录时,除非在子目录后面再加一条“/”,否则就会遇到网址自动重定向至Nginx监听的端口。假设你Nginx站点监听的端口是123,你本来访问的地址是http://domain.com/wp-admin,会自动重定向至http://domain.com:123/wp-admin

这位仁兄当然也给出了解决方案,也就是在 nginx 的 http 段增加配置:

port_in_redirect off;

然而在本机未生效。后来发现是 nginx 版本过低。具体的发现过程如下:

阅读 nginx 官方文档对这个参数的定义

http://nginx.org/en/docs/http/ngx_http_core_module.html#port_in_redirect

然后查看其关联指令absolute_redirect ,发现版本是1.90。
于是怒升1.8到1.12.2(上周刚发布的),搞定。

将博客的静态资源迁移到了七牛

最近实在是比较忙。高估了自己的能力。
现在主要是编码速度实在不尽如人意。以后针对这一点好好做一下训练吧。

最近抽空把博客速度慢的问题好好解决了一下。主要使用七牛云来作为主要的托管媒介。
细分一下这个需求的话分为如下两点:
1、域名未备案导致的解析速度缓慢,由于页面内存在比较多的本地资源,导致加载速度感人,手机上的表现是白屏,电脑上也时不时抽风。
2、图片资源使用七牛默认域名(测试域名),导致新版Chrome认为资源不安全,拒绝加载。
3、JS类库来自本地或海外cdn,速度感人。

于是花了大概十分钟的时间解决了一下这个问题。不得不说,七牛的工具虽然做的比较烂,但是能用。

现将步骤记录在这里。

1、WP侧安装插件七牛云储存
插件链接:https://wordpress.org/plugins/wpjam-qiniu/
也可以直接在后台搜索安装。
正常配置,填写AK和SK, 同时为你的储存区域分配一个SSL域名(这是要收钱的,不过4毛钱1G也就那样了吧),填写为你的加速域名

2、在服务器上下载七牛迁移工具(应该是同步工具)
https://qiniu.kf5.com/hc/kb/article/68954/
按照页面说明初始化,并将wp-contents和wp-include目录中的静态资源(css、js)按照路径,以分别的目录前缀(wp-contents/和wp-include/)上传到七牛云的储存空间。

然后就可以正常的享受这个加速了。

介绍下搭建这个博客遇到的坑

从决定开始重新搭个博客一直到这玩意上线,前前后后花了我大概两个多月的时间。虽然中间还有例如做 mai 硬盘和其他私活,但是我还是觉得时间有点太久了。整理的概要文档都快忘光了,趁彻底忘记自己写的是什么之前把一些坑记录下。

1、vps 的选择

首先就是服务器的选择了。因为个人使用,加上对网络要求比较高,因此我一开始就把目标放在了千元每年左右的vps上。首先一个大坑就是没有选择国内相对稳定的免备案vps,先后尝试了 linode、Diahosting、OneAsia等相对还稍微比较像样的vps,但是无一不在三天后获得gfw认证。尤其是linode,基本开半个小时ssh都被墙掉了。最后还是经过朋友推荐来 aws 开了一年免费套餐,反正一年后正常续费就是了。

这个 aws 偶尔也是会有墙掉的情况,具体症状是我昨天部署完 wordpress 之后,安装程序会导致与服务器的ssl连接莫名其妙断开,之后就连不上了。算了,目前还可以,凑合用。

对了,我选择的是韩国机房。

2、nginx的编译

vps开好了之后,就是环境的搭建了。刚开始踩的大坑是vps内存不够2G是编译不了 mysql 的。装了一堆东西编了一堆垃圾之后,我重新开了新的镜像从零开始。

首先是 nginx ,我参考的编译参数是来自于这个网页的说明:https://my.oschina.net/liucao/blog/470241 ,为了防止原网页挂掉,我把网页的原文粘在下面。

$ ./configure \
--prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-http_auth_request_module \
--with-mail \
--with-mail_ssl_module \
--with-file-aio \
--with-ipv6 \
--with-http_spdy_module \
--with-cc-opt='-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic'

第一个坑就来自于编译参数,我现在使用的 nginx 已经是1.11.3,其中的-with-http_ssl_module已经变成了–with-http_v2_module 。 这也证明httpv2正式成为一个新的标准了。

3、php7

选择php7的原因是它真的有了非常大的提升。

之前编译 mysql 给我留下的阴影实在太大了,我转而选择为 yum 增加源,使用 yum 进行安装。

主要参考的文档是:http://blog.csdn.net/dxywx/article/details/50609137

这里有个文字的坑,就是这个博主的代码段里面有很多特殊字符被转成了全角,别的还好。

然后关于源本身和其他插件的安装,需要把 yum install php-**** ,全部都替换成 yum install php70w-**** 。 别的没有什么特别需要注意的了。

4、分区挂载

aws 的定制 centos 确实针对自身做了非常多的优化,但是有些优化也确实让人很摸不着头脑。比如外挂的储存卷,本意的设计是方便快速迁移,但是我一开始真的对着文档蒙逼了半天。特别大的坑也没有,就是默认分区格式是 ext4 ,fstab需要特别指定一下。

5、安全区

我也不知道是不是我遇到 bug 了,之前明明给这台 vpc 开放了80 和 443 端口,但是就是连不上。删掉安全区重新分配后就好了。

6、SSL证书

首先是 openssl 请务必升级一下。aws 带的这个还是1.0.1e,这是我前东家都放弃的版本,包含了完整的两个心跳漏洞。加个源1分钟就更新好了,别省这点事了。

然后说说证书,我选择的 SSL 证书来自ssls.com 。这家是以出售廉价 SSL 证书著名的。我看中的是它签发的根机构是 COMODO 。价格也还好,我分别为woodu.me git.woodu.me(准备装个gitlab)购买了证书,一共花了大概200多块的样子,各三年。因此我觉得价格还可以接受。

购买的过程中基本没有什么要注意的,只有一点,域名认证的时候,推荐选择的是基于域名管理邮箱的邮箱认证,这个速度很快,基本确认了邮件证书就可以下来。我之前主站选择了放置文件进行 check,结果因为编码问题文件不符,还专门去联系了客服帮我手动通过。

(更多…)