一. 心血来潮
FQ 对于我来说从来不是什么刚性需求,以前对那些所谓的“秘闻”
痴迷不已,后来对这些失了兴趣。直到我开始使用Google Photos , 又开始频繁地上Google 。近来各种整顿,上Google的各种途径越来越不好走。索性自己搭个SS吧,说干就干。这时是晚上10点50。
二. 初次交手
由于以前也混迹过科学上网的圈子,便直奔逗比根据地
看了几篇对比介绍vps的文章,买了最便宜的搬瓦工套餐。不仅便宜,而且支持支付宝付款,比较方便。因为搬瓦工集成了SS服务,所以直接进入后台开启便可。由于我办的是长城的宽带,出口速度非常不尽人意。Google Photos备份最高都只能偶尔到100K/S左右。联隔壁的联通还能上到1M/S。连上搬瓦工后台都卡顿,这东西真是让人恼火。一番折腾下来,已是凌晨,该睡觉去了。
三. 优化速度
次日一早便在公司试了下,还是Google Photos最高速度依然在1M/S多。于是趁着闲暇时间搜了一下如何优化SS。
比较推荐的有锐速,FinalSpeed,TCP-BBR等,由于锐速已破产,FinalSpeed已停止更新,所以选了BBR。BBR是谷歌社区开发的TCP拥塞控制技术,目前Linux Kernel 4.9 以上的版本都已加入了该算法,所以我们只要升级内核,即可享用。大概了解了一下,这技术大概就相当于交警和红绿灯。能保证线路的畅通,保证效率最大化吧。具体就不介绍了,反正我也不知道,能用就行了。
我的系统是 CentOS 6 x64,以此平台为例,说明如何更新的。值得注意的是目前仅支持kvm架构,不支持openvz。
go,首先通过下面命令查看当前内核版本是否>=4.9
uname -r
下载内核
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -ivh http://elrepo.org/people/ajb/devel/kernel-ml/el6/x86_64/RPMS/kernel-ml-4.12.0-0.rc8.el6.elrepo.x86_64.rpm
sed -i 's:default=.*:default=0:g' /etc/grub.conf (设置为默认内核)
然后可以通过命令 sudo vi /boot/grub/grub.conf
查看是否设置成功,如果没有可手动将 default
修改为版本号 >= 4.9的内核版本即可,序号从0开始 . 接着查看/etc/sysctl.conf
是否存在net.ipv4.tcp_congestion_control
和net.core.default_qdisc
,存在就删除掉。
echo "net.ipv4.tcp_congestion_control = bbr" >> /etc/sysctl.conf
echo "net.core.default_qdisc = fq" >> /etc/sysctl.conf
sysctl -p
执行这一步时可能会有类似报错error: "No such file or directory" setting key "net.core.default_qdisc"
,不用管直接reboot
即可。重启后执行
sysctl net.ipv4.tcp_available_congestion_control
如果结果中有bbr,则证明你的内核已开启BBR。
执行 lsmod|grep bbr
,看到有tcp_bbr模块即说明BBR已启动。
执行以下两个命令如果有bbr,则也表示成功运行
sysctl net.ipv4.tcp_available_congestion_control
sysctl net.ipv4.tcp_congestion_control
至此,加速完成,最高速度可以达到2-3M/S,但也不是非常稳定,可能是因为服务器在美国吧,经常抽个风什么的也说不定。也可能是服务器机房的原因。
四. 搭建博客
博客以前是用HEXO,因为是静态博客,简单易用,但迁移,发布都比较麻烦。一直想整个动态博客,最开始是打算用wordpress,但比较臃肿,而且是用PHP写的,对此心有一些不爽,毕竟自己是学Java的。终于末日在v2ex遇到了tale
这款博客。完全符合自己的期望,就是你了。
首先要安装jdk8,如果之前有安装jdk,先要卸载. 然后使用命令
yum -y list java*
yum -y install java-1.8.0-openjdk*
完成后可java -version
查看java版本。
然后下载tale,可以通过ftp上传,也可以sudo wget http://7xls9k.dl1.z0.glb.clouddn.com/tale.zip
直接下载。然后解压 unzip tale.zip
得到tale文件夹。然后cd tale/bin
,进入bin文件夹,执行sh tale.sh start | stop | reload
分别为启动,停止,重启。也可以进入tale文件夹java -jar tale-1.2.15.jar
启动。
这里会有一个问题,当退出终端或者远程连接时tale进程会一起终止,这里需要执行命令
nohup java -jar tale-1.2.15.jar >log.txt 2>&1 &
nohup的作用是不挂断运行命令,当终端或用户退出时程序仍然运行,> log.txt
是将该任务的所有输出重定向到log.txt,不在屏幕输出。可通过jobs
命令查看后台运行任务。如果想将任务调回前台,只需要 fg+编号即可。
至此,tale也就部署成功了。在浏览器地址栏输入ip:9000/install进入安装。
以后输入ip:9000进行访问,ip:9000/admin进行后台管理。
五. nginx代理
1.首先需要安装几个依赖,GCC(Linux一般自带), PCRE(Perl Compatible Regular Expression),OpenSSL .Nginx的Rewrite和HTTP需要用到PCRE,HTTPS支持需要OpenSSL。我这里系统是CentOs6 x64.
yum -y install pcre*
yum -y install openssl*
2.安装nginx
wget http://nginx.org/download/nginx-1.7.8.tar.gz
tar -zxvf nginx-1.7.8.tar.gz
cd nginx-1.7.8.tar.gz
./configure --prefix=/usr/local/nginx-1.7.8 \
--with-http_ssl_module --with-http_spdy_module \
--with-http_stub_status_module --with-pcre
一切正常后可以编译了
make
make install
完成之后进入nginx目录(默认)
cd /usr/local/nginx
如果忘记路径可通过whereis
命令搜索。
最后 启动 | 停止 | 重启 nginx
/usr/local/nginx/sbin/nginx
/usr/local/nginx/sbin/nginx -s stop
/usr/local/nginx/sbin/nginx -s reload
接下来配置nginx。
vi /usr/local/nginx/conf/nginx.conf
server{
listen 80;
server_name www.jaytang.me;
location /{
proxy_pass http://127.0.0.1:9000;
}
........
}
接下来直接访问ip,依然能访问成功。
六. 域名绑定
一大串ip实在是太难记了。我得买个一个好记的域名。出于经济和性价比的原因,我选择去namesilo
购买,不仅便宜,而且提供免费的隐私保护,而且还支持支付宝付款。购买时可以去网上搜索验证码,可以便宜一美元。
DNS解析是采用的是比较流行的dnspod
。
进入域名管理后台,将域名的 nameserver
改为dnspod的服务商
f1g1ns1.dnspod.net
f1g1ns2.dnspod.net
然后进入dnspod后台管理添加纪录即可,其中主机记录如果是www
则表示域名要加www
才能访问,如果是@
表示不要加www
即可访问。记录添加成功后最快几分钟内便会生效,最长72小时内会全球同步。
这里我出现过一个问题,搞了很久。那就是当页面跳转到非主页时,url显示的还是 ip:9000/***/***
.这里需要进入tale的后台管理,将博客地址设置为域名即可。
七. 启用https
https其实也不是什么必须的东西。既然都弄好了,那也便试试吧。首先开启https需要有ssl证书,前面提到nginx有个openssl模块,这个便是可以生成自签名证书的。如果使用这个证书,浏览器便会提醒用户这是个不安全的网站,给你的URL上画个大大的红线。现在申请免费SSL证书十分快捷粗暴,为了去掉那讨厌的红线,只好去申请个正宗的SSL证书。这里我直接使用腾讯云的SSL证书,实名认证即可,非常快。当然,如果不想认证,去国外申请也是可以的。申请通过后,下载证书,提取ngixn模块下的 .crt 和 .key两个文件上传到/usr/local/nginx/conf
. 然后配置 nginx.conf
server {
listen 80 ;
listen 443 ssl ; #同时监听80和443端口,即同时开启http和https
server_name www.jaytang.me; #域名
ssl_certificate /usr/local/nginx/conf/1_www.jaytang.me_bundle.crt; # 腾讯云证书
ssl_certificate_key /usr/local/nginx/conf/2_www.jaytang.me.key; #key
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
...........
}
这里也出现过一个问题,困扰了很久,那就是当访问https时,CSS 和 JS,图片文件无法加载,会被浏览器认为不安全脚本。需要手动确认后才能加载。查了很多资料才知道原因,是因为https中包含引用了http的资源,这种混合请求会被认为是不安全的。但http包含https是没有问题的。针对这个问题,我认为应该通过nginx配置来解决问题,通过正则匹配不同的文件类型来做出不同的操作,结果并没有什么用。对nginx的认知实在太少,完完全全在照搬网上给出的配置来一个个试。整整一天,还是没有解决。第二天我想起了源码,去把对应的文件找出来,改为https就可以了。我觉着应该是这么个搞法,一看源码发现这些被拦截的文件都是引用了一个地址,也就是说这个地址是从后台获取的,应该是存在于数据库中的一个字段。应该是可以由用户定义的字段,那么........显而易见,所有和url地址相关的设置只有一个地方,和上面一样,没错,就是把上面配置的域名改为https即可。
问题迎刃而解,我心中还有一个想法,那就是是否要强制使用https呢?那也十分简单,修改nginx配置文件。监听本地80端口,将http请求转发到 https。
server {
listen 80;
server_name www.jaytang.me;
rewrite ^(.*)$ https://$host$1 permanent;
}
八. 最后说几句
哎,折腾这玩意最大的障碍不是各种报错,不是这种稀奇古怪的问题。而是网络,那狗屎长城宽带,访问什么都慢,折腾什么都扎心。去你的渣渣!!!
网友评论