vps折腾日志

vps折腾日志


本文记录了我对本网站所在的 vps 的配置和 wordpress 的安装记录。

vps的购买与对比

其实现在的vps与云服务商有一大堆,国内的最常用的就有阿里云、腾讯云、华为云等等,国外比较出名与常用的几家有linode、bandwagonhost、vultr、DigitalOcean等。这七家vps服务商除了华为云我没试用过以外其他的全部都用过,用的时间长度也不一定。接下来我就从价格、速度、稳定性、便捷性几个方面大概评说一下这六家服务商。希望对大家的选择有个参考。

国内与国外云服务器最大的区别在于带宽,国内云服务商或者机房位于香港的vps带宽价格统统让人看了心惊肉跳,国外云服务商什么每月1T跟国内云服务商对等的就是1Mbps(是bps,后面我就不强调这个事了,后面大家也会看到国内的服务商网络流量基本都是按照每月多少流量来看配置的,而国内服务商基本都是按几M带宽来看的)。

阿里云、腾讯云

把这两个国内的云服务器代表放在一起说是因为他们的相似度很大,买哪个都差不多,如果买服务器在国内的就看哪个优惠大点。

优点:

  1. 用户量大(国内半数以上的vps都是阿里云、腾讯云的用户)
  2. 优惠活动也很多(什么双十一、开学Hi购、学生优惠什么的),活动力度大的时候甚至可以达到10RMB/月(1cpu、1G内存、1M带宽、40G硬盘),平常的优惠活动也基本上能让你24RMB/月就买到这样的配置,还是相当实惠的。而且买的越久优惠越大。
  3. 国内访问的速度超快(ping值基本全部在100ms以内)

缺点:

  1. 带宽超贵(像我这种穷人基本上只能买得起1M或者2M带宽的vps)
  2. 国内服务器需要备案,很麻烦。如果买这两家国外的服务器那性价比就远不如linode、vultr、bandwagonhost、DO这几家了。但是阿里云的香港服务器有个特例,阿里云香港服务器有个24RMB/月的方案(1cpu、1G内存、30M峰值带宽、40G硬盘),但关键在于你得买得到才行。
  3. 续费价格跟优惠价格不一致,我们如果趁着优惠的时候买了一台服务器,但是到了年限的时候续费那个价格就远不如购买的时候那么优惠了,所以如果在优惠价格的时候买就一次性多买几年。
  4. 产品太多,看的人头晕,什么ECS、轻量服务器、计算型、突发型,一大堆。经过我的研究,每个月$5左右价格的基本上看看入门配置就可以了,上其他高配置的(比如企业应用、云计算什么的)可以直接联系他们的客服,会有惊喜哦!

推荐购买:

我这里只推荐入门的配置机器,首推阿里云香港24RMB/月或者34RMB/月的机器,不用备案,国内访问速度一流。如果这个机器买不到或者可以忍受备案的繁琐程序可以直接选择国内的服务器,这两家的随便选,根据自己的需求与可承受价格去选。购买的时机建议选择在双十一或者搞活动的期间,基本都会在五折以下,甚至二折(1cpu、1G内存、1M带宽、40G硬盘的配置应该在两百多RMB一年左右),还有就是如果决定长期使用就买年限长一些,越长越优惠。

linode

优点

  1. 稳定,真的非常稳定(我说的是机器,不是指网络,网络的堵塞跟实际场景和使用访问人数相关)。
  2. 价格还算优惠,最便宜的$5/月(1GB RAM、1CPU Core、25GB SSD Storage、1TB Transfer、40Gbps Network In、1000Mbps Network Out)。
  3. 机房数量多(纽瓦克、亚特兰大、达拉斯、弗里蒙特、法兰克福、伦敦、新加坡、东京)

缺点

  1. 只支持Linux系统,不支持windows server
  2. 购买需要使用PayPal或者信用卡,不支持支付宝和微信

推荐购买

这里我只推荐机房(国内访问的情况下),因为国外这几个服务商的配置都很清晰、简单,只要看有货没货就行了,反正就那么几种。访问稳定建议选弗里蒙特,ping值一般在200左右,但是稳定性好。东京原来有Tokyo1,现在卖光了,新开了一个Tokyo2,但是速度不如Tokyo1理想,东京机房就是跟国人的扎堆有关系,在访问量小的时候毕竟离大陆近,访问速度飞起,但是在傍晚访问流量大的时候丢包非常严重。所以大家自己权衡求稳还是求一时速度。

域名

域名的话反正就是自己选择一个合适的名字,然后到域名注册商那里注册,我选择的是 namecheap ,国内比较有名的就是万网(阿里旗下),国外大家用的多的是 godaddy 。看个人喜好,不过如果需要 cn 域名的话就只能在国内注册。国内跟国外的区别同 vps 选择。

vps必备软件的安装与初始设置

在购买vps之后需要对vps做一些基本的设置,我们才能方便的使用。如下以centos为例来说明初始的一些设置,不同的系统设置方式可能有所区别。但设置的内容基本都是一致的。

更新系统

更新基本系统

在vps刚刚安装完系统就对系统进行更新是最佳的选择,以免今后安装了一大堆的软件后再来对系统进行更新导致一些奇奇怪怪的问题。vps最重要的点在于稳定(当然,纯粹用于开发练手的除外),所以尽量保持内核不变,系统选用稳定版本,主要的服务软件都采用编译的方式。

# 更新系统
yum update
# 更新完成后重启一下系统,确认更新的内核什么的都没有问题
reboot

开启bbr

  1. 增加elrepo源
cat > /etc/yum.repos.d/elrepo.repo << EOF
[elrepo-kernel]
name=ELRepo.org Community Enterprise Linux Kernel Repository - el7
baseurl=http://elrepo.org/linux/kernel/el7/\$basearch/
        http://mirrors.coreix.net/elrepo/kernel/el7/\$basearch/
        http://jur-linux.org/download/elrepo/kernel/el7/\$basearch/
        http://repos.lax-noc.com/elrepo/kernel/el7/\$basearch/
        http://mirror.ventraip.net.au/elrepo/kernel/el7/\$basearch/
enabled=1
gpgcheck=0
EOF
  1. 安装elrepo内核及grub2
yum -y install kernel-ml grub2
# 查看内核是否安装成功
ls -l /boot/vmlinuz*
  1. 替换内核
# 如果已经有/boot/grub目录则不需要新建
mkdir /boot/grub
# 更新grub2配置文件
grub2-mkconfig -o /boot/grub/grub.cfg
  1. 修改vps上的内核启动方式

然后将服务器进行重启。

  1. 确认是否已经使用新内核
uname -a
  1. 开启BBR
cat >>/etc/sysctl.conf << EOF
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
EOF
  1. 确认是否已经开启BBR
sysctl net.ipv4.tcp_available_congestion_control
lsmod | grep bbr

关闭selinux

selinux对系统管理是一个很好的安全工具,但同时对系统管理员也是一个很麻烦的负担,很多时候也不知道出了什么问题导致的。比如修改ssh端口的时候如果忘了改selinux的设置,sshd都启动不了。所以是否关闭selinux还是自己考虑吧。编辑/etc/selinux/config:

# 启动
# SELINUX=enforcing
# 关闭
SELINUX=disabled

关闭后需要重新启动系统。

基本编译开发环境的安装

我们的vps上如果跑一个网站的话会要安装如Nginx、php、MySQL等类的软件,就像之前所说,尽量采用编译的方式来安装这些软件,保持软件的稳定性。尽量不要使用源里面的软件包进行安装。而编译软件所需要具备的条件就是编译环境,没有编译器又怎么去编译软件呢。

# 安装编译环境组套件
yum groupinstall "Development Tools"
# 设置git
git config --global user.name "Yourname"
git config --global user.email "youremail@gmail.com"

ssh的设置

生成密匙

ssh作为我们管理vps的操作接口,其重要性就不用我来强调了,同时也应该注意ssh的安全性。我们首先来生成自己登录用的密匙。

# 生成的过程按提示操作即可(建议设置密码)
# 默认公匙:~/.ssh/id_rsa.pub
# 默认私匙:~/.ssh/id_rsa
ssh-keygen -t rsa -C "your_email@example.com"
# 导入公匙
cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys
# 修改公匙认证文件权限
chmod 400 ~/.ssh/authorized_keys

然后用sftp软件把私匙下载到本地,怎么下载和在putty里面使用就自行网上脑补吧。下载完成后记得删掉服务器上的私匙。

可以用putty等软件测试一下私匙是否可以登录(如果后续采用只允许key登录的方式,一定要进行测试)。

修改设置

修改ssh适合我们的使用主要需要修改的是/etc/ssh/sshd_config文件。

# 修改端口(改为自己想要的端口,不要用默认的22)
Port 5000
# 不允许使用密码登录(必须使用key)
PasswordAuthentication no
# 保持连接
# 第一句意思是服务端每间隔30s会向客户端发送一个空数据包
# 第二句表示服务器最大会发送60次,30*60=1800s=30min=0.5h
# 24小时期间连接是不会断开的
ClientAliveInterval 30
ClientAliveCountMax 60
# 关闭图形转发
X11Forwarding no

关于 ssh 保持连接也可以在本地进行设置,服务器可以不用设置。比如使用 putty 就在 Connection 页面下将 Seconds between keepalives (0 to turn off) 选项填写 60,然后把下方的 Enable TCP keepalives (SO_KEEPALIVE option) 勾选。

如果没有关闭selinux:

如果没有按照前面的关闭selinux,则修改ssh端口后还需要对selinux进行设置,这是因为对于 ssh,SELinux 默认只允许 22 端口,我们可以用 SELinux 管理配置工具 semanage,来修改 ssh 可访问的端口。

# 搜寻包含semanage 软件的软件包名称
yum provides semanage
# 安装semanage
yum -y install policycoreutils-python
# 为 ssh 添加新的允许端口
semanage port -a -t ssh_port_t -p tcp 5000
# 查看当前 SELinux 允许的端口
semanage port -l | grep ssh

重启服务并打开防火墙端口

修改完此文件后,重启ssh服务:

systemctl restart sshd.service

打开防火墙端口(打开防火墙端口之前不要关闭已连接的ssh,不然由于之前我们修改了端口会连接不上),修改 /etc/firewalld/zones/public.xml 为类似如下的样子。

<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="dhcpv6-client"/>
  <service name="http"/>
  <service name="https"/>
  <port protocol="tcp" port="5000"/>
</zone>

然后就是重新加载防火墙配置(如果没有打开防火墙则打开防火墙服务就好了)。

# 打开防火墙
systemctl start firewalld
# 开机启动防火墙
systemctl enable firewalld
# 重载防火墙设置
firewall-cmd --reload
# 查看防火墙打开端口
firewall-cmd --list-all

firewalld是采用 zone 来对防火墙规则进行分类的,总共有 9 个 zones(vps 上一般使用的就是 public ,而谷歌云上这种有外部防火墙的默认使用的是 trusted):

  • drop(丢弃)
    任何接收的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络连接。
  • block(限制)
    任何接收的网络连接都被 IPv4 的 icmp-host-prohibited 信息和 IPv6 的 icmp6-adm-prohibited 信息所拒绝。
  • public(公共)
    在公共区域内使用,不能相信网络内的其他计算机不会对您的计算机造成危害,只能接收经过选取的连接。
  • external(外部)
    特别是为路由器启用了伪装功能的外部网。您不能信任来自网络的其他计算,不能相信它们不会对您的计算机造成危害,只能接收经过选择的连接。
  • dmz(非军事区)
    用于您的非军事区内的电脑,此区域内可公开访问,可以有限地进入您的内部网络,仅仅接收经过选择的连接。
  • work(工作)
    用于工作区。您可以基本相信网络内的其他电脑不会危害您的电脑。仅仅接收经过选择的连接。
  • home(家庭)
    用于家庭网络。您可以基本信任网络内的其他计算机不会危害您的计算机。仅仅接收经过选择的连接。
  • internal(内部)
    用于内部网络。您可以基本上信任网络内的其他计算机不会威胁您的计算机。仅仅接受经过选择的连接。
  • trusted(信任)
    可接受所有的网络连接。

其完整文档可以查看红帽文档:使用防火墙,当然也可以直接 google 需要的命令。

如下是一些常用的命令:

#======================
# zone 操作
#======================
# 查看所有zone
firewall-cmd --get-default-zone
# 将默认的zone修改为work
firewall-cmd --set-default-zone=work
# 查看默认的zone
firewall-cmd --get-default-zone
#查看eth0网卡的zone
firewall-cmd --get-zone-of-interface=eth0
# 查看lo的zone
firewall-cmd --get-zone-of-interface=lo
#给lo网卡增加public zone
firewall-cmd --zone=public --add-interface=lo
#删除eth0网卡的block zone
#删除指定网卡修改的zone之后,它的zone会变回默认的zone
firewall-cmd --zone=block --remove-interface=eth0
#查看系统中所有网卡所在的zone
firewall-cmd --get-active-zones

#======================
# service 操作(service 就是zone下面的一个子单元,可以理解成指定的一个端口。)
#======================
# 查看所有的servie
firewall-cmd --get-service
# 查看当前zone下的service
firewall-cmd --list-service
# 把服务增加到public的zone下(临时添加)
firewall-cmd --zone=public --add-service=http
# 把服务增加到public的zone下(永久添加,即写入/etc/firewalld/zones/public.xml文件)
firewall-cmd --zone=public --add-service=http --permanent
# 删除zone下的某服务(临时删除)
firewall-cmd --zone=public --remove-service=http
# 删除zone下的某服务(永久删除)
firewall-cmd --zone=public --remove-service=http --permanent

#======================
# 端口操作
#======================
# 列出 public zone 下的所有开放端口
firewall-cmd --zone=public --list-ports
# 永久添加 public zone 下的 8080 tcp端口
firewall-cmd --permanent --zone=public --add-port=8080/tcp
# 永久移除 public zone 下的 8080 tcp端口
firewall-cmd --permanent --zone=public --remove-port=8080/tcp

防火墙直接打开某个端口我一直使用的方式就是直接修改 /etc/firewalld/zones/public.xml文件来实现,因为在文件中已经有各种各样的端口配置,直接复制某行就可以了,删掉就注释某行,还可以有个参照,不至于需要去查询命令。

bashrc等用户配置文件设置

参照在个人服务器上搭建GIT仓库,搭建以后再建立软连接(参照WINDOWS MKLINK命令——各种链接文件)。

lnmp

安装

安装可以直接参照LNMP一键安装包的步骤操作即可。在软件安装完成后可以添加虚拟主机和https加密等(参照LNMP添加、删除虚拟主机及伪静态使用教程操作即可)。

http自动跳转https

nginx自动跳转https有三种方法:rewritereturnerror_page。编辑/usr/local/nginx/conf/vhost/fooleng.com.conf

rewrite方式

server {
    listen 80;
    server_name domain.com;
    rewrite ^(.*) https://$server_name$1 permanent;
}
server {
    listen 443 ssl;
    server_name domain.com;
    ssl on;
    # other
}

return方式

server {
    listen 80;
    server_name domain.com;
    return 301 https://$server_name$request_uri;
}
server {
    listen 443 ssl;
    server_name domain.com;
    ssl on;
    # other
}

error_page方式

server {
    listen 443 ssl;
    listen 80;
    server_name domain.com;
    ssl on;
    # other
    error_page 497 https://$server_name$request_uri;
}
server {
    listen 9443 ssl;
    server_name domain.com;
    # other
    error_page 497 https://$server_name$server_port$request_uri;
}

修改完成后注意重启Nginx(lnmp restart httpd)。

关闭默认站点空头主机(default配置)

修改 /usr/local/nginx/conf/nginx.conf 文件的 server{} 段:

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

return 500; 也可以修改为 rewrite ^(.*) https://www.fooleng.com permanent; 将流量导入到你指定的网站上。也可以改成 return 444; 这样所有的访问都被直接丢弃。

vps 性能与速度测试脚本

wget -qO- --no-check-certificate https://raw.githubusercontent.com/oooldking/script/master/superbench.sh | bash

参考链接

如有版权问题,请作者联系删除。

[1] Nginx HTTP跳转至HTTPS
[2] 便宜VPS+LAMP搭建与优化
[3] MySql(MariaDB)在小内存VPS上崩溃,该怎么办?

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注