日间杂谈

Reading time ~1 minute

想来已经一个多月没有写些什么了,这段时间各种忙,现在才算好不容易把事都一个个的结了,不过说句实在话,忙也由忙的好处,至少这段时间不至于整天想到那件让我崩溃的事了……

今天节奏稍微慢下来点,就把最近遇到的问题稍微捋一捋,也算是给最近的一个交待了……

由于新产品的开发,由PHP换到了node.js,所以两套代码一起跑是确定的了,又想用同一个域名,于是准备换nginx转发,鉴于之前从没玩过nginx,就只有默默的跑去查nginx的配置了。

不过查了一下,不得不说,nginx的配置看起来挺简洁的,多个域名以及路径的配置非常简洁,稍微纠结了一下的就是使用php cgi的配置,因为既然用nginx了,PHP又和nginx是放在同一台机器上的,就没必要用Apache了,直接用nginx连php cgi就好了。晚上nginx连php cgi的文章太乱,各种乱七八糟的参数配了一堆,最后总结+实验起来就用了下面这点:

location /v1 {
    try_files $uri $uri/ /index.php?$query_string;
}
location ~ .php$ {
    #try_files $uri =404;
    #fastcgi_split_path_info ^(.+.php)(/.+)$;
    fastcgi_pass unix:/dev/shm/php5-fpm.sock;
    include fastcgi_params;
}

因为PHP用的laravel的框架,所有请求都要rewrite到index.php上,第一个location用来做rewrite,第二个location就是用来将所有对PHP文件的请求转给php cgi执行,这里由于是一台机器,用的php-fpm,直接就使用了文件socket,然后放在了/dev/shm(这个目录在内存里),这样应该会比使用网络socket要快。

然后第二个location中配置的try_files是为了防止Nginx文件类型错误解析漏洞,不过我在php.ini中设置了cgi.fix_pathinfo=0,于是这里就注释了,至于那句fastcgi_split_path_info暂时也不是很确定是不是有意义,就先注释了留在那里了,什么时候有空仔细研究nginx的配置了再说。

本来以为nginx的切换会一帆风顺,可是没想到,把Apache换成nginx之后,自己测试已经没有问题了,但是上线没多久打印店就相继表示连不上后台了,本来一看是只有部分打印店表示有问题,就觉得肯定不是由于切换了nginx的原因,但是看着情况有点不对,就还是赶快换回了Apache,结果一换回去就好了,于是就傻眼了,怎么想也想不出来会是哪里出了问题。最后周五去办公室后,据说好像是只有使用XP的出了问题,就开了个XP的虚拟机,连nginx的服务器做测试,结果https就跪了,可是用http就没问题,然后fiddler检查给的错误是handshake挂了,这也难怪无论是在nginx的access还是error日志中都查不到请求的记录,只有用tcpdump抓包能看到有包。在多方改动无果的情况下,便愈发的觉得是https的加密算法的问题,就企图去找Apache的https加密算法的配置,结果尴尬的没找到……最后只好直接改nginx的加密算法测试,没想到一改就成功了,果然是服务器配置的加密算法和XP支持的加密算法完全不同惹的祸么……但是就无语了,只能说都是之前找到的ssl配置不靠谱惹的祸,不过最后总算是完美解决了。

结果最让人没想到的是,就在当天晚上准备再换成nginx之前,有家店连Apache的API时连不上了,报了和我们测试时连nginx挂彩时一样的错,然后直接换成连改好后的nginx就好了,当时就想,这几个月都没遇到过的问题,竟然恰好就在我们配nginx时发现并解决之后出现了,岂止幸运。

然后最近终于还是下决心买了个域名,之前一直舍不得+选择恐惧综合症,所以虽然想买个域名但却一直没有能下手。几番斟酌,最终选了q2zy这个域名,选这个域名是为了某些含义,却又不至于太明显,毕竟有些事不想让人知道,却又希望能于我有特殊意义。

买了域名,自然少不了各种配置,首先就是去QQ邮箱那边弄了个域名邮箱,然后就是博客等各种页面的域名分配了。

本来买国际域名最大的好处就是不用强制去备案,但是由于博客是架着SAE上的,也就不可避免的多了些蛋疼。SAE绑定域名如果不备案就只能绑海外线路,流量按国内线路的两倍算,不过这倒无所谓,反正云豆对于我而言就是多的根本用不完,可是蛋疼的是速度,海外线路的速度相比于国内线路,不解释的慢了不少,于是能不走海外线路的资源自然就得尽量不走海外线路,不过本来博客的各种静态资源都已经是完全用了七牛的CDN,没有什么可担心的(PS:CDN配置得重新按照这个写的改下)。但是,后台部分却没有开启加速,因为用的插件默认不开,所以没敢开,怕出什么问题,这下就蛋疼了,不过还好WordPress可以把后台和前台的地址设的不一样,虽说似乎这个功能本来目的不是我这个,不过无所谓了,能用就行,于是毫不犹豫的将前台页面设为刚买的域名,后台域名设成SAE的二级域名,然后此时后台的所有资源都是用的SAE的二级域名。不过这样也是有硬伤的,因为前后台域名不一样,故而cookie不公用,即使后台登录了,前台也拿不到登录信息。

接下来就是要将SAE二级域名过来的访问301重定向到自己的域名上,但是需要注意的是,不能所有请求都重定向,不然前后台域名设置不一样就白设了,于是最终得到的配置如下:

- rewrite: if ( in_header["host"] ~ "geekjayvic.sinaapp.com" && path == "/" ) goto "?%{QUERY_STRING} [L,QSA,R=301]"
- rewrite: if ( !is_file() && !is_dir() && in_header["host"] ~ "geekjayvic.sinaapp.com" && path ~ "^(.*)$" ) goto "$1 [L,QSA,R=301]"
- rewrite: if ( in_header["host"] ~ "blog.q2zy.com" && path ~ "^(.*)$" ) goto "$1 [L,QSA,R=301]"
- rewrite: if ( in_header["host"] ~ "^.note.q2zy.com" && path ~ "^(.*)$" ) goto "$1 [L,QSA,R=301]"

第二行用于将SAE的二级域名重定向过来(用!is_file和!is_dir的判断,确保了所有的文章页面都能重定向过来),第三行和第四行是将自己分配的几个域名都定向为一个,需要注意的是第一行,因为根目录is_dir判断为true,故第二行的重定向对根目录无效,所以需要专门添加一条重定向规则。

然后弄域名的时候有几件事真是弄的比较无奈,根域名由于配置了邮件,故而不能配CNAME记录了,而用SAE意味着得靠CNAME,当然可以自己强行直接得到ip指过去,不过SAE一旦换ip就会失效……然后有几个网页用Python写的,不能在SAE的AppConfig里直接设了,得到代码里面去做重定向,不过还好影响不大。

然后最近忙的比较多的就是三叶草比赛的事了,被几个朋友拉着陪他们一起参加三叶草,虽然感觉各种不靠谱,不过最后也算是勉强做出了个东西,结果哪知道,最终项目展示的时候,我不在,他们后台服务器竟然拉不起来了,当天凌晨他们还专门弄了试了是好的,结果临近开始告诉我挂了,但是真是急都急死了,远程教了半天也没能搞定,好像就是个没能连上MySQL或者连上了权限不足而已,结果到最后开始都没能搞定。最无语的时,就在最后到时间的时候,旁边朋友问我怎么不远程(TeamViewer),我就凌乱了,Mac也能远程,真是不知道,之前就一直在想要是能远程就好了……

比赛结果就别提了,只是拿了个参与奖,然而,另一个朋友参加比赛让我挂了个名(虽然不知道为啥不怕两个队都有我的名字),却拿了特等奖,我也是醉了……

最后,一眨眼BCTF就要开始了,虽说已经是由于和某比赛冲突导致推了一周,不过还是没能做什么准备,整个假期都被各种事占据着时间,大好的资源也没有看一点,真的感觉挺对不起队友的,不过也是很无奈,只希望比赛的时候能人品好点了。然后BCTF一完马上就跟着个0CTF,真的就是完全不知道该怎么办了,好希望能去一趟现场赛体验一下的说,哪怕打酱油也好啊~~~

挂载网络文件夹后网络故障时文件操作命令卡死

挂载 NFS 或者 Samba 的时候,经常会由于网络故障导致挂载好的链接断掉。此时如果尝试进行 ls、cd、df 等各种命令,只要与此目录沾上边,就会卡住。如果使用了类似 oh-my-zsh 这种配置的,只要在网络目录中,弹出命令提示符前就会直接卡住。这个时候第一反应就是...… Continue reading

路由折腾记 第四弹

Published on September 02, 2017