本文主要面对刚开始接触服务器的新手,是一篇很基础的关于服务器使用的入门教程。

主要讲的是如何连接服务器,已经做一些简单的自定义以及优化工作,虽然简单,但是效果却很明显。

服务器的坑

购买服务器之前,先避一些服务器的坑。

架构

因为服务器硬件性能较高,基本都是 16 核 32G 内存起步,现在在售的 1 核 2G2 核 4G 之类的服务器其实都是虚拟服务器,都是从一台较大的物理服务器中虚拟出来的。

既然是虚拟的,那么就需要虚拟技术,例如 Windows 下安装虚拟机就用到了 Hyper-V 虚拟技术,在服务器虚拟技术中,比较流行的有 OpenVZKVM ,由于 OpenVZ 在配置上比较灵活,很容易共享内存和 CPU ,导致黑心商家超售情况严重。

关于超售

以 32G 内存为例,如果虚拟成 2G 内存的服务器,正常情况下最后能得到 16 台虚拟服务器。

但是其实很多人在使用服务器过程中并没有完全用完 2G 内存,例如 2G 内存的服务器日常使用了 1G ,每个人都多出了 1G 内存,这个时候商家把用户暂时未用到的内存虚拟成 5 台新的服务器,接着卖。(用掉了 10G 内存,剩下 6G 内存作为冗余容错,如果新服务器也是使用了 1G 内存,那么就有 11G 内存作为冗余)

最后本应是卖出 16 台服务器的硬件成本,商家卖出了 21 台,这就是超售。

从上述例子可以看出,如果商家超售了,那么每个人能使用到多少内存取决其他用户用了多少内存,举个极端点的例子,如果上述原先的 16 位用户把 2G 内存都用完了,那么后来的 5 台机器因为没有内存可以使用,连开机都做不到,但全部用户把所有内存用完的情况极少出现,所以商家一般都有超售,区别只在于严不严重。

可以看出,如果商家轻微超售,其实对用户使用影响并不大,而且因为超售平摊了成本,可以让服务器的价格更低,所以有不少人还是不反对商家超售的。

但却有不少黑心商家超售严重,买的是1G内存,但是用的人太多,所以新机器一开机就只剩下100M,甚至有的连开机都做不到,也就是所谓的石头盘,而由于 OpenVZ 在超售上配置更简单,所以现如今市面上便宜的主机往往都是 OpenVZ 架构。

另外一种常见的架构 KVM 其实也存在超售,只是由于技术实现问题,所以超售没有 OpenVZ 那么严重,所以在可选的情况下,尽量选择 KVM 架构。

购买服务器

如果你是刚开始接触服务器,建议第一个服务器使用 vultr

Vultr 推广链接

因为 Vultr 有几点对新手很友好的优势:

  1. 刚注册有赠送试用金,可以用一个月。使用我的推广链接可以有 $100 的试用金,有效期一个月:Vultr 注册链接
  2. 赠送的试用金用完后,后期付费时也是可以随时销毁实例、随时暂停计费,如果买阿里云之类的服务器,那么就必须整月整月地付费,而且价格不低,甚至还有半年起付的
  3. 价格便宜,最低费用一个月 $3.5 (折合 ¥25 左右),足够新手试用了

**注意:**不建议买 $2.5 一个月的,因为没有 ipv4 地址,对新手来说会有太多无法解决的问题

  1. 可以免费备份,可以随时备份系统,操作导致系统出错时,可以直接从备份中恢复(相当于 Windows 的系统还原)

当然,缺点也是有的:

  1. 网络不算好,因为国内用的人比较多,带宽太拥堵
  2. 纯英文界面,Vultr 暂时没有中文支持
  3. 除了上述优点之外,其他方面做的都不比其他服务商好

总的来说,Vultr 就是很适合新手入门。

如果实在想白嫖,那么可以考虑 GCP(谷歌云),以前可以白嫖一年,不过最近因为被白嫖多了,规则变了,只能白嫖 90 天,而且网络很差,AWS(亚马逊)也可以白嫖,但是网络就更烂,基本到了不能用的地步。

我在对比考虑服务商时,主要考虑了以下的需求,你也可以参考一下:

  • 需要购买多少核心、多大内存的 VPS,一般需要 PHP 和数据库的服务,内存和 CPU 的开销都比较大
  • 用哪个 Linux 发行版,知道各个发行版的区别,且有能力自己装系统的,可以忽略这一条
  • 网络、硬盘容量、CPU 性能、价格那个更重要,这几样是鱼和熊掌的关系,不可兼得

如果有兴趣想购买,可以通过我的推荐链接注册,可以得到新手优惠:$100 的试用金(有效期一个月),我也能有推荐奖励:

Vultr 推广链接

初次建议购买 Los Angeles 的服务器,延迟在 200ms 左右 (相对较高,延迟越低越好),延迟不低,但是胜在稳定,如果选择 Tokyo,延迟能到 100ms 以下,但是晚高峰基本连接不上。

登陆服务器

刚买来的服务器有初始的用户名和密码,用户名一般为 root,密码会在购买详情页面看到,比如在 vultr 买的服务器,点击左侧 server,然后点击刚购买的服务器:

vultr服务器查看初始密码.png

然后就可以看到服务器 IP,初始用户和密码了:

vultr服务器查看初始密码-2.png

登录服务器需要用到的就这三个,而登录服务器有很多客户端可以选择,如果是 windows,可以选择安装 ssh 客户端,也可以用 openssh 插件,然后在 cmd 界面登陆。

但如果是 Linux 系统就省了安装 openssh 这一步,或者也可以安装 win10 上面的 Ubuntu 子系统,我现在用的就是子系统,怎么在 win10 上安装 ubuntu 子系统网上有很多教程,这里就不再赘述,安装完后运行以下命令连接服务器:

1ssh root@IP

这个 IP 是你服务器的 IP,不是 IP 这两个字母,初次登陆会问你是否要连接这个服务器,输入 yes即可,回车等一会弹出输入密码的提示 root@IP's password:,按提示输入密码即可连接。

简单美化

刚买的服务器界面比较简陋,虽然命令行界面比较简单,能做的美化不多,但还是有必要做一下,增加一下工作的乐趣。

这是初始界面:

vultr初始命令行提示符.png

编辑配置文件进行修改:

1vim ~/.bashrc

如果收到这样的提示,那么就是vim这个工具还没装上去:

未安装vim.png

装上去就可以了:

1# 更新
2yum update -y
3
4# 安装vim
5yum install vim -y

然后按下shift+g跳到最后一行,按下o在最后新建一行进行编辑,输入:

1PS1="\[\e[01;32m\]\h \[\e[01;35m\]\A \[\e[01;34m\](\w) \[\e[01;36m\]\\$ \[\e[0m\]"

按下Esc退出编辑模式,输入:wq保存并退出,然后重新加载更改后的配置文件

1source ~/.bashrc

此时就可以看到生效的配置了:

命令提示符修改后.png

更改主机名

从上面那张图可以看到主机名为vultr,这是默认的主机名,肯定有人想改成自己想要的名字,因为我的服务器在新加坡,那么我就改成Singapore

1hostnamectl set-hostname Singapore

然后重新登陆ssh就可以生效了

1# 退出ssh
2exit
3
4# 登陆
5ssh root@IP

添加密钥认证的登陆方式

在公共环境里,如果将服务器直接暴露出来,那么很容易中招,也就是容易被黑,因为每天都有人在大范围扫描服务器,筛选之后就是进行暴力破解了,所以保护好自己的服务器就至关重要了。

有个服务器,首要的任务就是做好登陆安全的工作,直接使用默认端口22,然后用户名@IP的方式登陆极其不安全的,解决办法就是使用密钥文件认证登陆,这样,只有保存有密钥的自己才能登陆,也就安全很多了。

使用密钥登陆的方法可以参考:《ssh使用密钥登陆Linux服务器

修改默认密码

默认密码要么太简单容易被破,要么是供应商随即设置的密码,太难记,可以自己设置密码:

1passwd root

然后会有提示让你输入新密码,不过要知道,这个时候输入的密码是不会显示出来的,而且是没有任何提示。输入两次密码之后就更改成功了。

linux更改root密码.png

优化网络

很多时候开到的VPS网络都不快,而换服务器又费时费力,倒不如自己优化一番,或许能得到很大的改善。

一般VPS的网络都很好,却因为网络拥塞而使得掉包严重,以至于严重影响网速,可以通过开启内核bbr加速的方式解决,具体查看:《CentOS加入BBR内核模块,极大提高服务器速度

禁止ping

永久设置

ping使用的是icmp协议,而许多网络攻击者在寻找潜在攻击目标时都会对网络上可能存在的服务器用ping的方式进行自动扫描,禁止ping,也就是不响应ping,就可以让这些自动扫描的攻击者以为这台服务器不存在,或者说这个ip地址未启用,能在一定程度上提高服务器安全。

除此之外,如果出现较大数量的用户对服务器进行ping,也会降低服务器性能,所以禁止ping也能避免网络拥堵。

直接编辑/etc/sysctl.conf文件:

1vim /etc/sysctl.conf

然后加入这一条:

1net.ipv4.icmp_echo_ignore_all = 1

最后重载即可:

1sysctl -p

其中,icmp_echo_ignore_all是内核参数,只要设置非0,服务器就会忽略所有ICMP_ECHO请求包。

将上面命令整合成一条命令:

1echo "net.ipv4.icmp_echo_ignore_all = 1" >> /etc/sysctl.conf

临时生效

如果需要临时测试服务器ping值,那么可以通过下面命令打开:

1echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

如果需要关掉,就把1改为0即可。

1echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

此设置会在系统重启之后失效。