您的位置  > 互联网

如何依托腾讯云主机(CVM)搭建前沿的安全高性能Web服务

首先,您需要购买域名。 您可以直接在阿里云或腾讯云上购买。 它并不昂贵。

只要不是来自 .com,花费不会超过几美元。

1、环境准备

腾讯云实例1个:

在腾讯云CVM产品首页按需创建。 本文使用的云服务器型号为S4。 请注意,购买时需勾选“免费分配公网IP”。 我们选择的操作系统是7。当然,本文中的大部分步骤对于/etc等其他系统是通用的。 下面的所有命令都在此实例内执行。

1个腾讯云域名:

在腾讯云域名注册页面选择注册。 选择一个你喜欢的域名~

以下简称wuju-.store。

2.设置域名解析

所谓添加域名解析记录,就是将域名记录与公有云上的云服务器关联起来。

腾讯云的云解析产品可以轻松管理我们的域名解析工作。

所有分析记录的添加可以在云分析控制台中设置。

腾讯云的解析生效速度非常快,所以我们可以通过域名记录登录CVM,例如:

ssh root@wuju-juwuba.store

申请SSL证书

接下来我们来申请Let's证书。 通过官方工具就可以轻松完成。 它本质上是ACME协议的客户端,专门为开发者自动管理证书申请流程而设计。

yum install certbot

证书申请

certbot certonly --standalone -n -m wuju1995123@163.com --agree-tos -d wuju-juwuba.store

应用程序执行过程大约需要十几秒,如下图:

成功后,会在/etc//live/wuju-.store/目录下生成证书相关文件:证书文件.pem和证书私钥文件.pem,稍后在Nginx配置中会用到。

设置自动定期证书续订

申请的证书将在90天后过期,但它附带了一个定期重新申请和颁发(更新)证书的工具:-renew。 当我们通过命令启动这个定时任务时,就不用担心证书过期了。

systemctl start certbot-renew.timer

3.安装Nginx

安装Nginx有两种常见的方式:通过发行包管理工具,或者通过源码编译安装。 如果您使用前者,您只需要:

yum install nginx
# Debian/Ubuntu下:apt install nginx

但目前主流发行版(如 / 等)中,由于 nginx / 等软件包版本较低,将无法支持 TLSv1.3 等功能,因此请在根据您的需求提供功能。

那么,我们来详细讲解一下如何通过源码安装最新版本的Nginx。 最新的稳定版本是1.16.0。 请注意尽可能安装最新的稳定版本。 太旧的版本不支持很多功能,例如HTTP/2(1.10之后支持)和TLSv1.3(1.15之后支持)。

最新版本的软件通常不在发行包管理工具(如Yum、APT)的软件库中,而是需要我们编译并安装源代码。 但对于我们CVM玩家来说,这根本不是问题。 跟我一起体验更大的自由度和灵活性吧~

我们选择在 /opt 目录中完成 Nginx 安装,这通常是一个合适的选择,但当然任何您习惯工作的目录都可以。

cd /opt

安装相关依赖软件包

主要是编译器、PCRE包和zlib包

yum install gcc pcre-devel zlib-devel

(这需要在/下用apt来完成,对应的包名为-dev和-dev)

下载源代码

下载该库的最新版本,版本 1.1.1b。 这是因为Nginx中的TLS协议和加解密都是由外部库(如/等)完成的,并且都是在项目中实现的。 系统默认比较旧,无法支持最新的HTTP/2和TLS功能。

只需两步:下载和解压。 无需编译和安装。

wget https://www.openssl.org/source/openssl-1.1.1b.tar.gz
tar -zxvf openssl-1.1.1b.tar.gz

从源代码编译Nginx

下载、编译并安装 Nginx,版本 1.16.0。

wget http://nginx.org/download/nginx-1.16.0.tar.gz
tar -zxvf nginx-1.16.0.tar.gz
cd nginx-1.16.0

配置编译选项。 注意,我们需要在这里指定代码目录。 Nginx在编译时会完成编译所需的部分。 在其选项中,我们重点关注启用 http/2 和 ssl 模块。 对于其他选项,如果以后想更改,只需重新配置和编译即可。 源码安装就是这么方便随心所欲。

./configure \
  --pid-path=/run/nginx.pid   \
  --with-http_v2_module      \
  --with-http_ssl_module     \
  --with-openssl=/opt/openssl-1.1.1b

编译安装

make && make install

Nginx默认会安装在/usr/local/nginx目录下(也可以通过编译选项指定)。

至此,我们就完成了Nginx的安装。实际执行

/usr/local/nginx/sbin/nginx

现在你可以启动Nginx服务了。 但是等等,让我们更优雅地完成这项工作。

将Nginx服务配置为系统服务

编辑文件:/lib///nginx.conf 并添加以下内容

[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
[Install]
WantedBy=multi-user.target

然后执行

systemctl daemon-reload
systemctl enable nginx.service

稍后我们可以通过命令来管理Nginx服务,例如()、()等。

systemctl restart nginx.service

配置 Nginx

编辑nginx.conf(或类似配置文件)中的部分,设置证书/密钥等SSL相关参数,并将端口80上的HTTP服务重定向到HTTPS的443端口。 详情如下:

server {
    listen       443 ssl http2;
    server_name  wuju-juwuba.store;
    ssl_certificate "/etc/letsencrypt/live/wuju-juwuba.store/fullchain.pem";
    ssl_certificate_key "/etc/letsencrypt/live/wuju-juwuba.store/privkey.pem";
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  10m;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    add_header Strict-Transport-Security "max-age=31536000";
    location / {
        root   html;
        index  index.html;
    }
}
server {
    listen       80;
    server_name  wuju-juwuba.store;
    if ($host = wuju-juwuba.store) {
        return 301 https://$host$request_uri;
    }
}