# 华为云服务器实践与 Nginx 部署,完整版
TIP
快速了解华为云服务器具体实践,Nginx 部署,端口转发,HTTPS 加密协议,域名解析,Nginx 性能优化 Gzip 压缩,最佳实践与多网站多系统部署 等 ...
# 一、华为云服务器
TIP
本次将使用华为云弹性云服务器 ECS ,作为我们项目部署的基础环境。
# 1、注册登录华为云平台
注:
只有通过此链接进入关联注册账号,后续使用服务器、域名、备案等才可享受官方合作优惠 及 专属技术支持服务
注册成功后,即可购买域名和服务器并享受华为云相关优惠政策
# 2、服务器购买配置选择
TIP
短期测试可选择按量付费1核1G
即可(经济实惠)不需要时,随时可释放;
作为长期学习或将自己的项目长期部署,未来放简历中或部署个人博客使用,可按年购买(相对更划算);
注:
服务器选择中国香港地区的,就不用备案马上就能用,中国大陆地区的都需要先备案才能用。备案时间根据各地区的要求时间不一样(从 1 周、0.5 个月、1 个月 ... 不等)
如果是需要正式运营的企业或个人项目,都需要走备案流程
# 3、选择公共镜像、操作系统版本
# 4、网络和安全组
# 5、高级配置
# 6、确认服务器相关信息无误,立即购买即可
# 7、创建成功后,返回云服务器列表
# 8、IP 地址即为服务器的公网 IP
TIP
进入云服务器列表,即可看到购买成功后的 中国香港服务器,通过 IP 地址即可访问服务器
# 二、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
填写用户名和邮箱 获取下载地址
注意:需要一个有效的电子邮件地址(不要乱填)!下载链接将发送到您的邮箱。
# 2、XShell 和 Xftp 安装过程直接下一步
注意:选择免费版即可 !
两个客户端都需要安装好,XShell 用于命令行操作服务器,Xftp 用于对服务器的文件上传和下载
# 3、新建连接服务器
TIP
新建会话链接 -> 输入服务器名称(可自定义) -> 输入主机 ip 地址(服务器公网 ip)-> 端口号 22 -> 其他默认,点击确认即可
选择 “接受并保存”
双击选择我们的服务器名称 -> 输入登录服务器的用户名(默认用户名为 root)-> 勾选记住用户名
输入服务器密码 - > 确认
# 4、输入命令连接测试
ls / 或 cd /
ll
或
ping baidu.com
都可以访问,即连接成功 !
注:
如无法登录成功,检查用户名和密码是否正确,同时检查云服务器的安全组是否有开启 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 启动成功
# 判断 Nginx 是否运行成功
TIP
- 在 linux 系统中运行的每个应用程序都会产生一个进程,可通过查看 nginx 进程是否存在来判断 nginx 是否运行成功。
- 或者查看 Nginx 是否正在运行中 !
ps -ef | grep nginx
# ps -ef:列出所有进程
# grep nginx:过滤掉和nginx无关的进程
查看 nginx 的进程 id
ps -C nginx -o pid
# 四、域名解析
TIP
将域名解析到对应的服务器中,后边所有的内容都会基于域名来进行操作
# 1、域名结构解读
通俗解读
一个完整的域名有三个部分的结构,分别是顶级域名(一级域名)、二级域名、三级域名。
顶级域名、一级域名、二级域名、三级域名什么区别 ?
- 从专业的角度解读
.com
是顶级域名(或一级域名)baidu.com
是二级域名www.baidu.com
或baike.baidu.com
是三级域名
- 民间域名级别解读
baidu.com
是顶级域名(或一级域名)www.baidu.com
或baike.baidu.com
是二级域名xx.www.baidu.com
或xx.baike.baidu.com
是三级域名
注:
从专业的角度来看,虽然解读是错误的,但也可以理解( 说的人多了也就是对的了…… 也就是 “约定俗成” )
包括国内阿里云、华为云、腾讯云的域名级别都是按此方式(民间级别解读)定义的,建议也用此方式,避免产生额外的沟通问题。对于专业定义知道即可 !
我们在购买域名时:
- 只需要购买一级域名(xxx.com 或 xxx.其他后缀)就好
- 二级、三级 ... 域名是不需要再次花钱购买的,只需购买域名的后台解析即可使用。
- 同时,我们就能理解
# 2、进入域名解析管理界面
进入解析界面
进入管理解析界面
# 3、顶级域名解析
arryblog.com
顶级域名解析成功后
在浏览器中即可通过顶级域名
arryblog.com
直接访问服务器中部署的网站了
# 4、二级域名解析
TIP
www.arryblog.com
也是二级域名
注意:
带 www
的域名 它与不带 www
的 arryblog.com
是完全不同的域名。因此,www.arryblog.com
这个域名是需要单独解析才能访问。
# ① 解析二级域名 www.arryblog.com
www.arryblog.com
二级域名解析成功后
在浏览器中通过
www.arryblog.com
访问即可
# ② 解析二级域名 web.arryblog.com
web.arryblog.com
二级域名解析成功后
在浏览器中通过
web.arryblog.com
访问即可
# 5、三级域名解析
pc.web.arryblog.com
三级域名解析成功后
在浏览器中通过
pc.web.arryblog.com
访问即可
# 五、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
登录链接 Xftp 成功后,上传项目源文件至
workspace/icoding/
目录中即可
上传完成后,重载 Nginx 服务
nginx -s reload
在浏览器中,输入域名
web.arryblog.com
即可访问
# 六、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)
具体流程如下:
# 6、申请免费 SSL 证书
# 7、NDS 验证
根据验证步骤,添加主机记录
添加主机记录成功后
再次返回 DNS 验证页面,点击验证按钮重新验证
验证成功,自动跳转下一步
# 8、下载证书
DNS 验证成功后
下载完成后,解压缩文件 -> 找到对应 Nginx 证书即可
两个证书文件,文件名可修改为
web.arryblog.com_server.crt
和web.arryblog.com_server.key
# 9、在 Nginx 服务器上安装 SSL 证书
官方文档参考
- 阿里云:https://help.aliyun.com/document_detail/98728.htm?spm=a2c4g.11186623.0.0.53cd158eVj35YO#concept-n45-21x-yfb (opens new window)
- 腾讯云:https://cloud.tencent.com/document/product/400/35244?from=14588 (opens new window)
- 华为云:https://support.huaweicloud.com/usermanual-ccm/ccm_01_0082.html (opens new window)
在 Nginx 安装目录(默认为
/etc/nginx/vhosts/cert
)下创建一个用于存放证书的目录,将其命名为cert
。
cd /
whereis nginx
ll
cd vhosts/
mkdir cert
cd cert/
将本地证书文件和私钥文件上传到 Nginx 服务器的证书目录
在服务器查看上传好的 证书文件
# 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
注意:
测试 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
第二种方式是:
通过站长工具验证,打开网页 GZIP 压缩检测 (opens new window),输入网站,进行查询:
# 6、添加 Gzip 压缩前后对比
添加 Gzip 前
添加 Gzip 后
# 八、企业项目域名跳转的终极解决方案
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 的企业级应用还有非常多的最佳实践,目前这些内容大家要先掌握掉,一步步逐渐深入并达到熟练的程度。
随着课程的深入和大家能力的提升、未来可期 ,一起加油 !
大厂最新技术学习分享群
微信扫一扫进群,获取资料
X