希望这是我踩的最后的nginx坑

善良单纯的小阿板
创建时间: 2016年12月30日 庆丰四年
最后编辑: 2016年12月30日 8 年前
写在....前边?

=== 事情是这样的,由于腾讯爸爸对我的照顾,本来对备案满怀信心的我彻底绝望了(光一个名字给我拒绝五次是什么鬼?)。当然我还是把腾讯爸爸的备案流程走完了,应该马上就能收到拍照幕布了。给博客的代替方案就是迁移到日本的主机(此处@我的CMO)。讲道理我是最不喜欢迁来迁去的,配环境神马的最恶心了。但是在恶心有腾讯爸爸恶心?所以老老实实的迁啊你!在经历了惨痛的一次一次踩坑,一次一次爬出来的过程,到今天下午解决玩最后一个问题之后,我觉得我“暂时”可以...长舒一口气了吧.... 特此记录踩坑地图~

正文!!

0x0 软件选择

觉得这不是个问题对不对?对于一个没有用过 linux,没有用过 VPS 的小萌新来说,第一次想要连服务器的时候,问的问题是...为什么没有给我 ftp 账密?之前倒不是完全没有接触过 VPS,但是只接触过 Windows VPS,还不是生产环境,我记得我第一次搞 VPS 是为了能...一直挂着 QQ...大学之后很幸运能成功申请到腾讯爸爸的学生扶持计划,正式接触学习生产环境的 linux。本来我天真的以为,这个111环境怎么不用备案呢?然后十天之后就收到邮件告诉我我被关停了.....

作为只用过虚拟主机的孩纸,我在 Rex 的指引下,首先尝试了 CentOS(讲的我好像还试过生产环境的 Ubuntu 一样)。庆幸我一开始就采用了 ssh-key 的方案,安全的好习惯要从娃娃抓起....其实当然是因为这更方便。最初选择的 CentOS6,可能是受 Rex 的影响,我没有选择7,后来发现我选什么的意义并不大,应为我也没用过 linux 也没有什么熟悉程序名的问题。作为一个机制的萌新,我一开始就知道应该选择 nginx 而不是 apache。为什么呢?因为 apache 是美帝的直升机呀!我们怎么能用资本主义的服务器程序?nginx 是谁的作品?我们的曾经战线盟友老毛哥!所以我作为一个爱国人士,就选择了 nginx。一开始我确实是知道 yum 是可以装程序的,但是我觉得,linux 这么自由这么开放的系统,nginx 这种科技应该是需要自己编译的吧,然后你就看到,一个萌新,采用编译法安装了 nginx 和 php。然后这个萌新死了。

而且到死都没配好好么!

后来,萌新才听说 EPEL 以及 remi 这种说法...从此萌新走上了康庄大道,没有赢取白富美。

安装最新的 nginx 确实没有问题,但是在安装了 php71 之后...才发现老版本的 wordpress 不支持71....于是麻溜的回滚到了56。

数据库简直就是一个坑!特别是在 Centos6 上。6没有自带 MariaDB 的源,MySQL 又是5.1版本的,萌新在准备编译安装之前...发现了 MariaDB 的 repo。但是萌新看了看1k/s 的下载速度。还是决定编译安装了... 第一次学到了 mysql_secure_installation 这个函数,也知道了 % 才是用来表示全局用户的。

0x1 老程序的转移

把老的 wp 转到新环境没出什么大问题,还好提前学会了 scp 的使用方法,超帅的~。虽然现在我压和解压的时候,还是会去查 zipunzip 的语法。

0x2 HTTPS

人这种动物呀,最怕安逸了。你说你好好的,对吧,用点默认配置,老老实实的就完了,为什么你偏偏要看到 HTTPS 这些邪教呢?证书获取没啥麻烦,letsencrypt 是个好东西。但是 nginx 不是啥好东西。好在也不难,一会就写对了 nginx 的配置,人生的第一次部署 HTTPS 也 get 了。

0x3 SSR

复习:人这个东西呀,就是闲着就会贱。本来服务器是买来做 SSR 自己用的,我就把服务器搬到了其中一台(CMO肯定不会知道,是的)。但是一闲下来,就想...不如试着做个 SS站?

噩梦开始了。

一开始采用的是 orvice 的原生的 ss-panel。然后发现...这货不..太...支...持...SSR。转向“山寨版” glzjin 的 ss-panel-v3-mod。后来发现,原来不是山寨版...而是一个神奇的版本!在配数据库和服务端的时候,没出太让人头疼的问题,我就摇身一变,兼职了 SS站站长。

0x3.8 SSR!

其实以前我对 SSR 并不了解,也只是听说了撕逼的风波和喝茶风波,不过没有仔细去研究。在这次深入研究 SSR 的过程中,我才发现,破娃酱是个妹子!!妹子!!啊啊情何以堪妹子会写我都不会用呢?这也可能是我很快的搭建好 SS 的动力吧....

0x3.9 SSR!!

在研究 S(破)S(娃)R(酱) 的过程中,接触了很久之前就有耳闻的 Telegram,使之在我的桌面上有了一席之地,我会告诉你专门用来看破娃酱的群组的么...还第一次接触到了 zeronet 。之前有接触过 tor 但是觉得没啥用,用不起来,但是这次 zeronet 确实使我对去中心化网络感了一点兴趣,还兴奋的一晚没睡着....

0x4 Typecho!

不复习了。反正我忍 wordpress 好久了,偶然在酷安看到了一个特别特别特别漂亮的博客主题,满心欢喜的想给自己换上,然后发现人家的站不是 wp 而是 typecho。然后我就转到 typecho 咯~

这个过程一点都不麻烦,真的!就是伪静态不好写呀,还得开 fix path 呀,插件麻烦呀,真没别的了!

我本来是打算用 try_files 的方法来伪静态的,但是根据网上给出的,试了一下午未果...于是只好用 if

在 location 中像 wordpress 一样

if (-f $request_filename/index.html){
        rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
        rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
        rewrite (.*) /index.php;
}

为了解决 fix path info 的问题,在 php 的 location 中添加

fastcgi_split_path_info ^(.+\.php)(/.+)$;

其实 path info 的问题,也可以通过伪静态规则来规避,像我{year}-自定义.html 样式的,就不存在 fix path info 的问题。

0x5 阻止ip访问

嘘!由于服务器也有ss,将来很可能会公开,所以我决定不让访问ip的用户看到任何东西。但是 nginx 的问题是,不但给你显示页面,还给你帮忙把域名也默认的跳转过去。在设置了 server_name default 之后,虽然不跳了...但是还是要显示内容。

我想要的结果,是访问ip之后,制造出一种80端口没有开放的假象,至少对于普通人看起来是这样的。后来我想到了这个逻辑的问题在于,物理的80肯定是开放的呀,nginx 监听到了之后,会好心的帮你跳一下。80端口没有办法真正的关闭,看起来都不行。经过搜索,最后找到了方案,nginx 提供的阻断连接的特殊的 http状态

server {
    listen 80 default_server;
    server_name _;
    return 444;
}

使一个虚拟主机监听80并且作为默认监听,server_name_ 代表ip访问,然后最重要的是返回 444444 并不是一个标准的 http状态码,而是 nginx 内部的一个状态码。正如它的中文读音....作用可以直接断开(重置)http连接,而不显示任何内容。

ending~~

坑就简单的写...这么多...坑是有限的,人的贱是无限的,撒花~~