# 华为云服务器实践与 Nginx 部署,完整版

TIP

快速了解华为云服务器具体实践,Nginx 部署,端口转发,HTTPS 加密协议,域名解析,Nginx 性能优化 Gzip 压缩,最佳实践与多网站多系统部署 等 ...

# 一、华为云服务器

TIP

本次将使用华为云弹性云服务器 ECS ,作为我们项目部署的基础环境。

# 1、注册登录华为云平台

TIP

为了我们可更低成本的学习和使用云服务器相关产品,我们跟官方云厂商合作,关联注册后可享受优惠。

槐里集团官网:http://www.iis090.cn/ (opens new window)

image-20220825163606919

注:

只有通过此链接进入关联注册账号,后续使用服务器、域名、备案等才可享受官方合作优惠 及 专属技术支持服务

注册成功后,即可购买域名和服务器并享受华为云相关优惠政策

image-20220826171047823

产品 -> 弹性云服务器 ECS

image-20220826171315430

立即购买 或 管理控制台(都可购买)

# 2、服务器购买配置选择

TIP

短期测试可选择按量付费1核1G即可(经济实惠)不需要时,随时可释放;

作为长期学习或将自己的项目长期部署,未来放简历中或部署个人博客使用,可按年购买(相对更划算);

注:

服务器选择中国香港地区的,就不用备案马上就能用,中国大陆地区的都需要先备案才能用。备案时间根据各地区的要求时间不一样(从 1 周、0.5 个月、1 个月 ... 不等)

如果是需要正式运营的企业或个人项目,都需要走备案流程

image-20220826192625395

# 3、选择公共镜像、操作系统版本

image-20220826193123063

# 4、网络和安全组

image-20220826205343216

# 5、高级配置

image-20220826204032220

# 6、确认服务器相关信息无误,立即购买即可

image-20220826205638780

# 7、创建成功后,返回云服务器列表

image-20220826210002998

# 8、IP 地址即为服务器的公网 IP

TIP

进入云服务器列表,即可看到购买成功后的 中国香港服务器,通过 IP 地址即可访问服务器

image-20220826210628689

# 二、XShell 和 Xftp 远程链接云服务器

TIP

我们每天需要对 linux 服务器进行操作、文件传送等,那就需要一款高效 Secure Shell 软件(简称 SSH 的)

实际上,SSH 是一个网络协议,允许通过网络连接到 Linux 和 Unix 服务器。SSH 使用公钥加密来认证远程的计算机。

XShell 和 Xftp 是 NetSarang 计算机公司 SSH 客户端软件

  • XShell 是非常强大的 SSH 客户端
  • Xftp 通过网络传输文件

其他常用的 SSH 登录工具

  • SecureCRT
  • Putty
  • Git Bash
  • ... 等

# 1、下载免费版 XShell 和 Xftp

image-20220820015627367

填写用户名和邮箱 获取下载地址

image-20220820021506261

注意:需要一个有效的电子邮件地址(不要乱填)!下载链接将发送到您的邮箱。

# 2、XShell 和 Xftp 安装过程直接下一步

注意:选择免费版即可 !

两个客户端都需要安装好,XShell 用于命令行操作服务器,Xftp 用于对服务器的文件上传和下载

# 3、新建连接服务器

TIP

新建会话链接 -> 输入服务器名称(可自定义) -> 输入主机 ip 地址(服务器公网 ip)-> 端口号 22 -> 其他默认,点击确认即可

image-20211009044101172

选择 “接受并保存”

image-20211009044153023

双击选择我们的服务器名称 -> 输入登录服务器的用户名(默认用户名为 root)-> 勾选记住用户名

image-20211009044410257

输入服务器密码 - > 确认

image-20211009044506328

# 4、输入命令连接测试

ls /  或 cd /
ll
或
ping baidu.com

都可以访问,即连接成功 !

image-20220826212004949

注:

如无法登录成功,检查用户名和密码是否正确,同时检查云服务器的安全组是否有开启 22 端口

# 三、Nginx Web 服务器安装和启动

TIP

Nginx (engine x) 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP 服务。点击查看,详细介绍 (opens new window)

Nginx 官网:http://nginx.org/

# 1、通过 yum 方式安装 Nginx

# ① 安装先决条件

# 安装yum依赖
yum install yum-utils

# ② 添加 yum 源文件

cd /etc/yum.repos.d/
# 添加nginx的yum源码
vim nginx.repo

# 或 直接新建 nginx.repo 文件
vim /etc/yum.repos.d/nginx.repo

# 按下键盘中 “i” 键 进入编辑状态

# ③ 添加配置信息到 nginx.repo 文件中

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

# ④ 保存并退出

# 按esc键 退出编辑状态
:wq

# ⑤ 安装 Nginx

yum install nginx -y
# yun install nginx
# 如果使用yum install xxxx,会找到安装包之后,询问你Is this OK[y/d/N],需要你手动进行选择。但是如果加上参数-y,就会自动选择y,不需要你再手动选择!

# ⑥ 查看 Nginx 的版本号

nginx -v
# 显示nginx的版本号和编译信息
nginx -V

# ⑦ 查看安装的所有 Nginx 包

yum list | grep nginx

# ⑧ 查看 Nginx 常用相关的文件位置信息

whereis nginx

# 2、启动 Nginx 服务

cd /usr/sbin/
./nginx
# 或
/usr/sbin/nginx

浏览器输入服务器的公网 ip 地址,访问出现以下界面,则 Nginx 启动成功

image-20220826220027096

# 判断 Nginx 是否运行成功

TIP

  • 在 linux 系统中运行的每个应用程序都会产生一个进程,可通过查看 nginx 进程是否存在来判断 nginx 是否运行成功。
  • 或者查看 Nginx 是否正在运行中 !
ps -ef  | grep nginx
# ps -ef:列出所有进程
# grep nginx:过滤掉和nginx无关的进程

image-20220826215722304

查看 nginx 的进程 id

ps -C nginx -o pid

image-20220826215813959

# 四、域名解析

TIP

将域名解析到对应的服务器中,后边所有的内容都会基于域名来进行操作

# 1、域名结构解读

domain-name

通俗解读

一个完整的域名有三个部分的结构,分别是顶级域名(一级域名)、二级域名、三级域名。

顶级域名、一级域名、二级域名、三级域名什么区别 ?

  • 从专业的角度解读
    • .com 是顶级域名(或一级域名)
    • baidu.com 是二级域名
    • www.baidu.combaike.baidu.com 是三级域名
  • 民间域名级别解读
    • baidu.com 是顶级域名(或一级域名)
    • www.baidu.combaike.baidu.com 是二级域名
    • xx.www.baidu.comxx.baike.baidu.com 是三级域名

注:

从专业的角度来看,虽然解读是错误的,但也可以理解( 说的人多了也就是对的了…… 也就是 “约定俗成” )

包括国内阿里云、华为云、腾讯云的域名级别都是按此方式(民间级别解读)定义的,建议也用此方式,避免产生额外的沟通问题。对于专业定义知道即可 !

我们在购买域名时:

  • 只需要购买一级域名(xxx.com 或 xxx.其他后缀)就好
  • 二级、三级 ... 域名是不需要再次花钱购买的,只需购买域名的后台解析即可使用。
  • 同时,我们就能理解

# 2、进入域名解析管理界面

image-20220826223523078

进入解析界面

image-20220826224954472

进入管理解析界面

image-20220826235115115

# 3、顶级域名解析

image-20220827004842932

arryblog.com 顶级域名解析成功后

image-20220827005423978

在浏览器中即可通过顶级域名arryblog.com直接访问服务器中部署的网站了

image-20220827005636297

# 4、二级域名解析

TIP

www.arryblog.com 也是二级域名

注意:

www 的域名 它与不带 wwwarryblog.com 是完全不同的域名。因此,www.arryblog.com 这个域名是需要单独解析才能访问。

# ① 解析二级域名 www.arryblog.com

image-20220827011748494

www.arryblog.com 二级域名解析成功后

image-20220827011958725

在浏览器中通过 www.arryblog.com 访问即可

image-20220827012404261

# ② 解析二级域名 web.arryblog.com

image-20220827010247055

web.arryblog.com 二级域名解析成功后

image-20220827013044996

在浏览器中通过 web.arryblog.com 访问即可

image-20220827010457036

# 5、三级域名解析

image-20220827013534940

pc.web.arryblog.com 三级域名解析成功后

image-20220827014004141

在浏览器中通过 pc.web.arryblog.com 访问即可

image-20220827014134797

# 五、Nginx 部署静态网站

TIP

将使用我们注册好的域名,实现静态网站的部署和实践

# 1、自定义 Nginx 配置文件

① 在 /etc/nginx/目录下新建文件夹 vhosts

whereis nginx
cd /etc/nginx/
ls
mkdir vhosts
cd vhosts
ls

② 新建自定义配置文件 web.arryblog.com.conf

# 与域名保持同名,是为了在部署多个项目时,容易区分和管理
vim web.arryblog.com.conf

web.arryblog.com.conf 文件内容如下

server {
    listen 80;
    server_name web.arryblog.com;
	location / {
      # 网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
      # 例如,您的网站运行目录在/workspace/icoding下,则填写/workspace/icoding
      root /workspace/icoding;
	  index index.html index.htm;
    }
}

③ 保存并退出

esc
:wq

④ 查看 cat web.arryblog.com.conf

cat web.arryblog.com.conf

⑤ 在/etc/nginx/nginx.conf 中的 http 模块底部引入以上新建的自定义配置文件 web.arryblog.com.conf

注意:在修改默认的 nginx.conf 配置文件时,需要先备份

cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak

编辑 nginx.conf 配置文件

cd /etc/nginx/
ll
vim nginx.conf

在 nginx.conf 文件中的引入自定义配置文件

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/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  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;

    # 导入自定义配置文件,用于配置我们自己的域名(导入的自定义配置文件是有先后顺序的)
	include /etc/nginx/vhosts/*.conf;
}
# 修改完成后,保存退出即可
esc
:wq

⑥ 再次查看配置文件信息

cat nginx.conf

⑦ 检查配置文件中是否存在语法错误

nginx -t

# 2、新建存放项目的目录

TIP

在 Linux 系统根目录新建 /workspace/icoding 目录(作为当前项目部署的目录),和配置文件一一对应

# 在Linux系统根目录中创建 /workspace/icoding 目录
mkdir -p /workspace/icoding

# 3、上传网站源代码至服务器

TIP

先找到刚刚在 Linux 根目录中新建的 /workspace/icoding 项目目录 -> 使用 Xftp 上传我们需要部署的静态网站即可

# 切换到Linux根目录
cd /
# 查看文件目录
ls
# 进入我们自定义的项目目录
cd workspace/icoding/
# 查看文件列表
ll

image-20220827044637179

登录链接 Xftp 成功后,上传项目源文件至 workspace/icoding/目录中即可

image-20220827045116601

上传完成后,重载 Nginx 服务

nginx -s reload

在浏览器中,输入域名web.arryblog.com即可访问

image-20220827045704882

# 六、Nginx 配置 HTTPS 加密协议

SSL 证书简介

SSL 证书(SSL Certificates)为网站和移动应用(APP)及小程序提供数据 HTTPS 加密协议访问,保障数据的安全。

装载 SSL 证书产品后自动激活浏览器中显示“锁”型安全标志,地址栏以“https”开头。

# 1、什么是 SSL 证书服务 ?

What is ?

SSL 证书服务( SSL Certificates Service)是由各大云厂商联合中国及中国以外地域多家数字证书颁发机构( CA,Certificate Authority),在各大云平台上直接提供的数字证书申请和部署服务。

SSL 证书服务帮助您以最小的成本将服务从 HTTP 转换成 HTTPS,实现网站或移动应用的身份验证和数据加密传输。

# 2、 华为云 SSL 证书和 HTTPS 的关系

TIP

您可以通过华为云 SSL 证书管理购买 SSL 证书,并向 CA 机构提交证书申请,CA 机构审核通过后将会签发证书。

签发后,您需要将 SSL 证书下载并安装到 Web 服务器中或一键部署至华为云其他云产品中,安装或部署完成后,您的 Web 服务器或云产品将会通过 HTTPS 加密协议来传输数据。

# 3、SSL 证书的作用

TIP

  • 网站身份验证,确保数据发送到正确的客户端和服务器。
  • HTTPS 加密传输协议可激活客户端浏览器到网站服务器之间的 SSL 加密通道(SSL 协议),从而实现高强度双向加密传输,防止传输数据被泄露或篡改。

# 4、为什么网站需要 HTTPS ?

TIP

  • 防劫持、防篡改、防监听:使用 SSL 证书实现网站的 HTTPS 化,可以对网站用户与网站间的交互访问全链路数据进行加密,从而实现传输数据的防劫持、防篡改、防监听。
  • 提升网站的搜索排名:使用 SSL 证书实现网站的 HTTPS 化后,网站在搜索引擎显示结果中的排名将会更高,有利于提升网站的搜索排名和站点的可信度。
  • 提升网站的访问流量:使用 SSL 证书实现网站的 HTTPS 化,可以强化网站在用户侧的身份可信程度,使网站用户能更安心地访问网站,提升网站的访问流量。

# 5、SSL 证书购买

TIP

华为云免费证书申请相关教程 https://support.huaweicloud.com/ccm_faq/ccm_01_0240.html (opens new window)

具体流程如下:

image-20220827061535312

购买流程:产品 -> 安全与合规 -> 云证书管理服务 CCM

image-20220827061854181

点击购买SSL证书

image-20220827062447399

选择免费SSL证书

image-20220827062750361

去支付

image-20220827062932385

确认0元支付

image-20220827063126624

返回证书管理控制台

# 6、申请免费 SSL 证书

image-20220827063708099

点击:申请证书

image-20220827064255639

绑定域名

image-20220827064712762

输入对应信息,提交申请

image-20220827064901166

证书申请提交成功,去DNS验证

# 7、NDS 验证

image-20220827065940831

点击验证,提示验证失败 !

根据验证步骤,添加主机记录

image-20220827071527534

添加主机记录成功后

image-20220827071738827

再次返回 DNS 验证页面,点击验证按钮重新验证

image-20220827065940831

验证成功,自动跳转下一步

# 8、下载证书

DNS 验证成功后

image-20220827072511509

点击下载证书

image-20220827072914572

下载完成后,解压缩文件 -> 找到对应 Nginx 证书即可

image-20220827073426454

两个证书文件,文件名可修改为

web.arryblog.com_server.crtweb.arryblog.com_server.key

image-20220827073739464

# 9、在 Nginx 服务器上安装 SSL 证书

在 Nginx 安装目录(默认为/etc/nginx/vhosts/cert)下创建一个用于存放证书的目录,将其命名为cert

cd /
whereis nginx
ll
cd vhosts/
mkdir cert
cd cert/

将本地证书文件和私钥文件上传到 Nginx 服务器的证书目录

image-20220827074855838

image-20220827080735153

在服务器查看上传好的 证书文件

image-20220827080955211

# 10、修改 Nginx 配置文件

TIP

编辑 web.arryblog.com.conf 配置文件,增加 SSL 证书配置 vim /etc/nginx/vhosts/web.arryblog.com.conf

# 以下属性中,以ssl开头的属性表示与证书配置有关。
server {
    # 配置HTTPS的默认访问端口为443。
    # 如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
    # 如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
    listen 443 ssl;
	# 填写绑定证书的域名
    server_name web.arryblog.com;

    # 证书文件名称
    ssl_certificate vhosts/cert/web.arryblog.com_server.crt;
    # 私钥文件名称
    ssl_certificate_key vhosts/cert/web.arryblog.com_server.key;
    # 指定客户端可以重用会话参数的时间(超时之后不可使用)
    ssl_session_timeout 5m;
    # 表示使用的加密套件的类型
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    # 表示使用的TLS协议的类型,您需要自行评估是否配置TLSv1.1协议。
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    # 设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件。
    ssl_prefer_server_ciphers on;
    location / {
        # Web网站程序存放目录
        root /workspace/icoding;
	    index index.html index.htm;
    }
}

# 设置HTTP请求自动跳转HTTPS
# 如果您希望所有的HTTP访问自动跳转到HTTPS页面,则可以在需要跳转的HTTP站点下添加以下rewrite语句
server {
    listen 80;
    # 需要将yourdomain替换成证书绑定的域名
    server_name web.arryblog.com;
    # 将所有HTTP请求通过rewrite指令重定向到HTTPS
    rewrite ^(.*) https://$server_name$1 permanent;
    location / {
        root /workspace/icoding;
	    index index.html index.htm;
    }
}

检测 Nginx 配置文件是否正确

nginx -t

重新加载配置文件,立即生效

nginx -s reload

在浏览器中输入域名,测试即可:https://web.arryblog.com

image-20220827084207456

注意:

测试 HTTPS 访问前必须在云服务器的安全组中开启 443 端口,否则无法访问

# 七、Nginx 性能优化,Gzip 压缩

Gzip 是一种用于文件压缩与解压缩的文件格式

它基于 Deflate 算法,可将文件压缩地更小,从而实现更快的网络传输。 Web 服务器与现代浏览器普遍地支持 Gzip,这意味着服务器可以在发送文件之前自动使用 Gzip 压缩文件,而浏览器可以在接收文件时自行解压缩文件。

而对于我们而言,开启 Gzip,不仅能提高网站打开速度,还能节约网站流量,如果购买的服务器是按照使用流量付费,开启 Gzip 就是在为自己省钱。

# 1、Nginx 与 Gzip

TIP

Nginx 内置了 ngx_http_gzip_module 模块,该模块会拦截请求,并对需要做 Gzip 压缩的文件做压缩。

因为是内部集成,所以我们只用修改 Nginx 的配置,就可以直接开启。

# 查看nginx相关目录
whereis nginx
# 进入 Nginx 目录
cd /etc/nginx
# 查看 Nginx 默认配置文件
cat nginx.conf
# 修改 Nginx 配置
vim nginx.conf

# 2、Nginx 事件处理模型优化

TIP

nginx 的连接处理机制在于不同的操作系统会采用不同的 I/O 模型。

  • Linux 下,nginx 使用 epoll 的 IO 多路复用模型;
  • 在 freebsd 使用 kqueue 的 IO 多路复用模型;
  • 在 solaris 使用 /dev/pool 方式的 IO 多路复用模型;
  • 在 windows 使用的 icop 等等。

要根据系统类型不同选择不同的事务处理模型,我们使用的是 Centos,因此将 nginx 的事件处理模型调整为 epoll 模型即可。

# 事件模型
events {
    # 使用epoll内核模型
    # 说明:在不指定事件处理模型时,nginx默认会自动的选择最佳的事件处理模型服务。
    use epoll;
    # 每一个进程可以处理多少个连接,如果是多核可以将连接数调高 worker_processes * 1024
    worker_connections 51200;
}

# 3、GZIP 压缩性能优化

TIP

在 nginx 的默认主配置文件nginx.conf中,添加以下配置即可

# 开启压缩功能,on 表示开启 off 表示关闭,默认是 off
gzip on;
#表示允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取。默认值是0,表示不管页面多大都进行压缩,建议设置成大于1K。如果小于1K可能会越压越大。即:小于设置值的文件将不会压缩
gzip_min_length  1k;
# 设置压缩所需要的缓冲区大小
gzip_buffers 4 32k;
# 设置gzip压缩针对的HTTP协议版本
gzip_http_version 1.1;
# gzip 压缩级别,1-9,数字越大压缩的越好(一般选择4-6),也越占用CPU时间
gzip_comp_level 6;
gzip_types text/css text/xml application/javascript;
# 是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary on;

# 4、nginx.conf 配置修改

events {
    use epoll;
    worker_connections 51200;
    multi_accept on;
}

http {
    gzip on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 6;
    gzip_types application/atom+xml application/geo+json application/javascript application/x-javascript application/json application/ld+json application/manifest+json application/rdf+xml application/rss+xml application/xhtml+xml application/xml font/eot font/otf font/ttf image/svg+xml image/jpeg image/gif image/png text/css text/javascript text/plain text/xml;
    gzip_vary on;
    gzip_disable   "MSIE [1-6]\.";
}

修改完 nginx 配置文件后,记得重载 nginx 服务即可生效

nginx -s reload

# 5、验证 Gzip 是否成功

第一种方式是:

直接查看网络请求,打开浏览器的调试工具,查看 Network 请求,如果请求响应头的 Content-Encoding 字段为 gzip,就表示成功开启了 Gzip

image-20220827174126730

第二种方式是:

通过站长工具验证,打开网页 GZIP 压缩检测 (opens new window),输入网站,进行查询:

image-20220827174305634

# 6、添加 Gzip 压缩前后对比

添加 Gzip 前

image-20220827163128159

添加 Gzip 后

image-20220827163634482

# 八、企业项目域名跳转的终极解决方案

TIP

以下 Nginx 配置的最佳实践是 SEO 优化的必备技术解决方案

  • http: no-www 跳转到 www
  • http: www 跳转到 no-www
  • https: no-www 跳转到 www
  • https: www 跳转到 no-www

具体的 Nginx 配置待大家在正式运营的需要时,再做讲解 !先把目前讲的内容扎实的掌握好即可。

# 九、多网站、多系统部署

TIP

  • 传统方式部署(已经讲过,自行尝试部署)
  • 根据企业项目业务需求的变化,架构升级部署方式也会同步升级,参考之前课程中讲到的《互联网技术架构设计 15 次演进全过程》
  • 容器化 Docker + Kubernetes 大规划集群分布式架构设计落地实战 + 微服务架构实战落地部署 + CICD + 系统平台监控 + 灰度发布,实现容器弹性扩容完整系统

注:

关于 Nginx 的企业级应用还有非常多的最佳实践,目前这些内容大家要先掌握掉,一步步逐渐深入并达到熟练的程度。

随着课程的深入和大家能力的提升、未来可期 ,一起加油 !

上次更新时间: 6/8/2023, 9:23:17 PM

大厂最新技术学习分享群

大厂最新技术学习分享群

微信扫一扫进群,获取资料

X