美文网首页
折腾服务器

折腾服务器

作者: RuffianJay | 来源:发表于2017-07-23 23:32 被阅读587次

    一. 心血来潮

    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_controlnet.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;
        }
    

    八. 最后说几句

    哎,折腾这玩意最大的障碍不是各种报错,不是这种稀奇古怪的问题。而是网络,那狗屎长城宽带,访问什么都慢,折腾什么都扎心。去你的渣渣!!!

    相关文章

      网友评论

          本文标题:折腾服务器

          本文链接:https://www.haomeiwen.com/subject/czfvkxtx.html