VPS Notes

个人VPS折腾笔记(Based on Center OS 7)

近期搬瓦工上线了CN2线路的VPS,售价$29.9,还不错,便入手了一台。
购买链接(含aff)

加速(锐速,BBR)

锐速

安装wget

1
yum install wget

下载锐速脚本

1
wget -N --no-check-certificate https://raw.githubusercontent.com/wn789/serverspeeder/master/serverspeeder.sh

执行脚本

1
bash serverspeeder.sh

默认脚本不支持Center OS,需要更换内核(版本:3.10.0-327.el7.x86_64)

1
rpm -ivh http://xz.wn789.com/CentOSkernel/kernel-3.10.0-229.1.2.el7.x86_64.rpm --force

查看安装好的内核

1
rpm -qa | grep kernel

存在kernel-3.10.0-327.el7.x86_64即可

重启VPS

1
2
reboot
uname -a //查看是否更换成功

内核如下

1
Linux host.localdomain 3.10.0-229.1.2.el7.x86_64 #1 SMP Fri Mar 27 03:04:26 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

再次执行脚本

1
bash serverspeeder.sh

BBR

安装wget

1
yum install wget

下载bbr脚本并执行

1
2
3
wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh
chmod +x bbr.sh
./bbr.sh

查看安装情况

1
2
3
4
5
6
7
8
uname -r
sysctl net.ipv4.tcp_available_congestion_control //查看返回值
返回net.ipv4.tcp_available_congestion_control = bbr cubic reno即正常

sysctl net.ipv4.tcp_congestion_control
返回 net.ipv4.tcp_congestion_control = bbr

lsmod | grep bbr //查看bbr是否启动

使用一键脚本

1
wget -N --no-check-certificate "https://raw.githubusercontent.com/chiakge/Linux-NetSpeed/master/tcp.sh" && chmod +x tcp.sh && ./tcp.sh

防火墙

centerOS 7默认为firewalld防火墙
使用方法

firewalld的基本使用

启动: systemctl start firewalld

查看状态: systemctl status firewalld

停止: systemctl disable firewalld

禁用: systemctl stop firewalld

systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。

启动一个服务:systemctl start firewalld.service

关闭一个服务:systemctl stop firewalld.service

重启一个服务:systemctl restart firewalld.service

显示一个服务的状态:systemctl status firewalld.service

在开机时启用一个服务:systemctl enable firewalld.service

在开机时禁用一个服务:systemctl disable firewalld.service

查看服务是否开机启动:systemctl is-enabled firewalld.service

查看已启动的服务列表:systemctl list-unit-files|grep enabled

查看启动失败的服务列表:systemctl --failed

配置firewalld-cmd

查看版本: firewall-cmd --version

查看帮助: firewall-cmd --help

显示状态: firewall-cmd --state

查看所有打开的端口: firewall-cmd --zone=public --list-ports

更新防火墙规则: firewall-cmd --reload

查看区域信息: firewall-cmd --get-active-zones

查看指定接口所属区域: firewall-cmd --get-zone-of-interface=eth0

拒绝所有包:firewall-cmd --panic-on

取消拒绝状态: firewall-cmd --panic-off

查看是否拒绝: firewall-cmd --query-panic

那怎么开启一个端口呢

添加

1
2
firewall-cmd --zone=public --add-port=80/tcp --permanent
(--permanent永久生效,没有此参数重启后失效)

重新载入
firewall-cmd --reload

查看
firewall-cmd --zone= public --query-port=80/tcp

删除

firewall-cmd --zone= public --remove-port=80/tcp --permanent


搭建Hexo博客

环境搭建

安装node

安装编译环境

1
sudo yum install gcc gcc-c++

安装nvm

1
2
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.1/install.sh | bash
nvm --version //查看安装的nvm版本

选择版本并安装

1
2
3
nvm list-remote				//查看所有node版本
nvm install v6.11.2 //安装v6.11.2
node --version //查看安装的node版本

安装git

1
yum install git-core

安装hexo

1
2
npm install hexo-cli -g
hexo --version

更新OpenSSL

1
2
3
4
5
6
7
8
9
10
11
12
wget https://github.com/openssl/openssl/archive/OpenSSL_1_1_1b.zip
unzip OpenSSL_1_1_1b.zip
cd openssl-OpenSSL_1_1_1b
curl https://raw.githubusercontent.com/hakasenyang/openssl-patch/master/openssl-1.1.1b-chacha_draft.patch | patch -p1
./config
make install

执行 openssl version 必报错误
openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
解决方法
ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

安装nginx(默认配置)

1
2
3
4
5
6
7
8
9
10
wget http://nginx.org/download/nginx-1.15.10.tar.gz
tar -zxvf nginx-1.15.10.tar.gz
cd nginx-1.15.10
./configure --with-http_v2_module --with-http_ssl_module --with-http_gzip_static_module

yum install -y pcre-devel
yum install -y zlib-devel

make
make install

开机启动nginx

即在rc.local增加启动代码就可以了。

1
2
3
4
vi /etc/rc.local
增加一行 /usr/local/nginx/sbin/nginx
设置执行权限:
chmod 755 rc.local

启用服务器

生成网页

执行以下命令生成public文件夹即为博客网页

1
2
hexo clean
hexo generate

修改nginx.conf

修改serverlocation-root,该目录为网站对应的目录,将上面生成的目录下所有文件拷贝到上述目录,执行/usr/local/nginx/sbin/nginx -s reload重启nginx即可

nginx.conf(仅修改部分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
user  nginx;
worker_processes 1;

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/nginx.pid;

events {
worker_connections 1024;
}


http {
include mime.types;
default_type application/octet-stream;

#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';

#access_log logs/access.log main;

sendfile on;
#tcp_nopush on;

#keepalive_timeout 0;
keepalive_timeout 65;

#gzip on;

server {
listen 80;
server_name xxx.com;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {
root /home/nginx/www/blog;
index index.html index.htm;
}

error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}


启用HTTPS(TLS1.3)

nginx环境

见环境安装

SSL证书(通配证书)

使用acme.sh

1
curl https://get.acme.sh | sh

采用子账号生成Ali_Key 和 Ali_Secret

1
2
export Ali_Key=""
export Ali_Secret=""

生成证书

1
acme.sh --issue --dns dns_ali -d mxdhqm.com -d *.mxdhqm.com

自动续期证书
由于 Let’s Encrypt 默认有效期为90天,过了60天就可以续期。为了避免忘记续期,添加一个脚本每天自动运行。为了保证nginx稳定性,每天定期重启一次,一并添加至脚本中

ssl_renew.sh

1
2
3
#!/bin/sh
acme.sh --renew -d mxdhqm.com -d *.mxdhqm.com
nginx -s reload

定期执行脚本
修改/etc/crontab,添加执行命令

1
0  5  *  *  *  root       sh /root/ssl_renew.sh > /dev/null 2>&1

查看是否添加成功 crontab -l

修改nginx.conf

要想全站https,添加301跳转

1
2
3
4
5
6
7
8
server{
listen 80;
server_name xxx.com; //跳转域名
#告诉浏览器有效期内只准用 https 访问
add_header Strict-Transport-Security max-age=63072000;
#永久重定向到 https 站点
return 301 https://$server_name$request_uri;
}

https server,默认监听443端口
ssl_protocols 中加入 TLSv1.3 (仅 Nginx 1.13.0 及以上 低版本用 TLSv1.2就行)

ssl_ciphers 加入 TLS1.3 加密套件 支持的有如下

1
2
3
4
5
TLS13-AES-256-GCM-SHA384
TLS13-CHACHA20-POLY1305-SHA256
TLS13-AES-128-GCM-SHA256
TLS13-AES-128-CCM-8-SHA256
TLS13-AES-128-CCM-SHA256

nginx.conf部分配置如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
server {
listen 443 ssl;
server_name xxx.com;

#证书路径
ssl_certificate /root/.acme.sh/mxdhqm.com/fullchain.cer;
ssl_certificate_key /root/.acme.sh/mxdhqm.com/mxdhqm.com.key;
ssl_trusted_certificate /root/.acme.sh/mxdhqm.com/ca.cer;

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;


ssl_ciphers 'TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:SSLCipherSuiteECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256;';

ssl_prefer_server_ciphers on;

location / {
root /home/nginx/www/blog;
index index.html index.htm;
}
}

最终效果

0%