浅出搞懂Nginx
点击勘误issues (opens new window),哪吒感谢大家的阅读
# 浅出搞懂Nginx
Nginx 的特点是:
- 内存占用少
- 并发能力强(可支持大约 50000 个并发连接)
- 配置超简洁
- bug 非常少
- 安装超简单
- 服务特别稳(几个月也不需要重启)
反向代理是 Nginx 作为 Web 服务器最常用的功能之一。
总结一句就是,正向代理是代理客户端的,让你能正常访问目的服务器。
与之相反,反向代理是代理服务器的,让大量的请求均衡地访问到某一台服务器上。
举个例子,10 万个 同时在访问 .com, 如果只有一台服务器的话,很容易就瘫痪了,于是高并发的情况下会有很多台服务器(假如 10 台吧)来接这个活,那怎么让 10 万个 访问到这 10 台服务器呢?
这就需要一个反向代理服务器了,反向代理服务器让 1 万个 访问服务器 A,1 万个 访问服务器 B,1 个 访问服务器 C,这样的话,每台服务器的压力就相应减小了,是不是很 nice?
那问题来了。每台服务器的能力可能不同,比如说服务器 A 的内存比较大一点,有 100 个 G;服务器 B 的内存小一点,有 10 个 G;服务器 C 的内存更小一点,只有 1 个 G。怎么才能让没台服务器承担起它能力范围内的访问呢?
Nginx 内置了轮询和加权轮询来达到负载均衡的目的。服务器 A 牛逼就把它的权重加大一点,让 5 万个 访问它;服务器 B 弱一点,权重就再小一点,让 2 万个 访问它;服务器 C 更弱,权重就最小,让 1 万个 访问它。
除此之外,Nginx 还有一个很牛逼的功能是动静分离。
在我们的软件开发中,有些请求是需要后台处理的;有些请求是不需要后台处理的,比如说 css、js 这些文件请求,这些不需要经过后台处理的文件就叫静态文件。
我们可以根据一些规则,把动态资源和静态资源分开,然后通过 Nginx 把请求分开,静态资源的请求就不需要经过 Web 服务器处理了,从而提高整体上的资源的响应速度。
# CentOS 下部署 Nginx
本文在示例步骤中的软件版本如下,在实际操作时,请您以实际软件版本为准。
- 操作系统:CentOS 7.5
- Nginx 版本:Nginx 1.16.1
# 安装 Nginx
购买完成后,在云服务器的详情页面,单击登录,可以直接登录云服务器,输入自己的用户名密码后,开始搭建 Nginx 环境。有关如何创建云服务器实例,请参见 创建云服务器实例。
# 安装 Nginx:
yum -y install nginx
# 查看 Nginx 版本
nginx -v
# 查看 Nginx 安装目录
rpm -ql nginx
# 启动 Nginx
service nginx start
访问该云服务器的公网 IP 地址,表示 Nginx 部署完成:
Nginx 的默认根目录 root 是/usr/share/nginx/html,直接修改 html 下的 index.html静态页面,用来标识这个页面的特殊性,相关操作如下:
执行如下命令,进入html 下的 index.html 静态页面:
负载均衡(原“应用型负载均衡”)可以根据后端服务器的路径来进行请求转发,在/image路径下部署静态页面,相关操作如下:
依次执行如下命令,新建目录 image 并进入该目录:
mkdir /usr/share/nginx/html/image
cd /usr/share/nginx/html/image
执行如下命令,在image目录下创建 index.html静态页面:
vim index.html
按 “Esc”,输入:wq 保存编辑并退出。
Nginx 的默认端口是80,如果想修改端口请修改配置文件并重启 Nginx。
# 负载均衡快速入门
腾讯云负载均衡支持 TCP、UDP、TCP SSL、HTTP 和 HTTPS 协议,提供基于域名和 URL 路径的灵活转发能力。本文将引导您如何快速创建一个负载均衡(CLB)实例,并将来自客户端的访问请求转发到两台后端云服务器(CVM)上。
前提条件
已创建两个云服务器实例(本文以 rs-1 和 rs-2 实例为例)。有关如何创建云服务器实例,请参考 购买并启动云服务器实例。
已在云服务器上搭建后端服务。本文以 HTTP 转发为例,已在两台云服务器上部署 Nginx 服务器,并在 rs-1 和 rs-2 分别返回一个带有 “Hello nginx! This is rs-1!” 和 “Hello nginx! This is rs-2!” 的 HTML,详情请参考 CentOS 下部署 Nginx。
# 步骤一:购买负载均衡实例
负载均衡实例成功购买后,系统将自动分配一个 VIP,该 VIP 为负载均衡向客户端提供服务的 IP 地址。
登录腾讯云 负载均衡服务购买页。
在负载均衡 CLB 购买页面,地域选择与云服务器相同的地域,实例类型选择负载均衡,网络类型选择公网。更多参数详情请参考 产品属性选择。
说明:
目前仅广州、上海、南京、济南、杭州、福州、北京、石家庄、武汉、长沙、成都、重庆地域支持静态单线 IP 线路类型,其他地域支持情况请以控制台页面为准。如需体验,请联系商务经理申请。申请通过后,即可在购买页选择中国移动、中国联通或中国电信的运营商类型。
单击立即购买,完成付款。
返回实例管理页面,选择对应的地域即可看到新建的实例。
# 步骤二:配置负载均衡监听器
负载均衡监听器通过指定协议及端口来负责实际转发。本文以负载均衡转发客户端的 HTTP 请求配置为例。
配置 HTTP 监听协议和端口
当客户端发起请求时,负载均衡会根据监听的前端协议与端口接收请求并向后端服务器转发请求。
登录 负载均衡控制台。
在“实例管理”页面中,找到目标负载均衡实例,单击配置监听器。
在“监听器管理”页签中的“HTTP/HTTPS 监听器”区域下,单击新建。
在“创建监听器”对话框中,配置以下内容,配置完成后,单击提交。
监听器名称,名称可输入60个字符,允许英文字母、数字、中文字符、“-”、“_”、“.”。
监听协议端口。例如 HTTP:80。
配置监听器的转发规则
当客户端请求时,负载均衡会根据配置监听器的转发规则进行请求转发。
在“监听器管理”页签中,选中刚才新建的监听器,单击+添加规则。
在“创建转发规则”对话框的“基本配置”页签中,配置域名、URL 路径和均衡方式。配置完成后,单击下一步。
域名:您的后端服务所使用的域名,本例使用 www.example.com。详情请参见 配置负载均衡的转发域名。
默认域名:当客户端请求没有匹配本监听器的任何域名时,CLB 会将请求转发给默认域名(default server),每个监听器只能配置一个默认域名。若该监听器没有配置默认域名时,CLB 会将请求转发给第一个域名。本例不配置。
URL 路径:您的后端服务的访问路径,本例使用 /image/。
均衡方式选择“加权轮询”。详情请参见 均衡方式。
在“健康检查”页签,开启健康检查,检查域名和检查路径使用默认的转发域名和转发路径,完成后单击下一步。
在“会话保持”页签,关闭会话保持,单击提交。
有关负载均衡监听器的更多内容,请参考 负载均衡监听器概述。
说明:
转发规则:一个监听器可配置多个域名,一个域名可配置多条 URL 路径,选中监听器或域名,单击+,即可创建新的规则。
会话保持:若关闭会话保持功能,选择轮询的方式进行调度,则请求会被依次分配到不同后端服务器上;若开启会话保持功能,或关闭会话保持功能但选择 ip_hash 的调度方式,则请求会被持续分配到同一台后端服务器上。
为监听器绑定后端云服务器
当客户端请求时,负载均衡将请求转发到监听器绑定的云服务器上进行处理。
在“监听器管理”页面,单击+展开刚才创建的监听器,选中 URL 路径,在右侧“转发规则详情”区域单击绑定。
在“绑定后端服务”对话框中,选择绑定实例类型为“云服务器”,再选择与 CLB 实例同地域下的云服务器实例 rs-1 和 rs-2,设置云服务器端口均为“80”,云服务器权重均为默认值“10”,然后单击确认。
返回“转发规则详情”区域,可以查看绑定的云服务器和其健康检查状态,当端口健康状态为“健康”时表示云服务器可以正常处理负载均衡转发的请求。
说明:
一条转发规则(监听协议 + 端口 + 域名 + URL 路径)可以绑定同一台云服务器的多个端口。如用户在 rs-1 的 80 和 81 端口部署了一样的服务,则 CLB 支持示例中的转发规则同时绑定 rs-1 的 80 和 81 端口,两个端口都会接收到 CLB 转发的请求。
# 骤三:配置安全组
#
创建完负载均衡后,您可以配置负载均衡的安全组来隔离公网流量,详情请参考 配置安全组。
安全组配置完成后,您可以选择开启或关闭安全组默认放通,不同选择配置如下所示。
方法一:开启安全组默认放通
具体操作请参考 配置安全组默认放通。
方法二:在 CVM 安全组上放通客户端 IP
具体操作请参考 配置安全组默认放通。
步骤四:验证负载均衡服务
配置完成负载均衡后,可以验证负载均衡是否生效,即验证通过一个负载均衡实例下不同的 域名+URL 访问不同的后端云服务器,也可验证内容路由(content-based routing) 的功能。
方法一:配置 hosts 将域名指向 CLB
在 Windows 系统中,进入 C:\Windows\System32\drivers\etc 目录,修改 hosts 文件,把域名映射到 CLB 实例的 VIP 上。 为了验证 hosts 是否配置成功,可以运行 cmd 命令行工具,用 ping 命令探测一下该域名是否成功绑定了 VIP,如有数据包,则证明绑定成功。 在浏览器中输入访问路径 http://www.example.com/image/,测试负载均衡服务。若如下图所示,则表示本次请求被 CLB 转发到了 rs-1 这台 CVM 上,CVM 正常处理请求并返回页面。
此监听器的均衡方式是“加权轮询”,且两台 CVM 的权重都是“10”。刷新浏览器,再次发送请求,若如下图所示,则表示本次请求被 CLB 转发到了 rs-2 这台 CVM 上。
方法二:配置云解析 DNS 将域名指向 CLB
打开 腾讯云域名注册页面 进行域名查询和注册。本例以example.com 为例,详情请参考 域名注册。
登录 云解析 DNS 控制台,在“域名解析列表”页面,单击目标域名右侧“操作”列的解析。 在“记录管理”页签,单击添加记录为域名添加 A 记录,在添加记录区域,填写以下参数: 主机记录:即域名前缀。本例以解析所有前缀为例,设为 *.example.com。
记录类型:A记录。
线路类型:默认。
记录值:单击关联云资源,在“关联云资源”对话框勾选刚才创建的 CLB 实例。
TTL:设置为默认值“600s”。
添加完成后,单击保存。
在添加完解析记录十分钟左右后,在浏览器中输入绑定后的 CNAME 域名(如本例中的www.example.com/image/),若正常显示页面,则表示负载均衡生效。
配置重定向功能(可选)
重定向配置分为手动重定向和自动重定向,详情请参见 重定向配置:
自动重定向(强制 HTTPS):PC 端、手机浏览器等以 HTTP 请求访问 Web 服务,在 CLB 代理后,返回 HTTPS 响应。默认强制浏览器以 HTTPS 访问网页。
手动重定向:当出现 Web 业务需要临时下线(如电商售罄、页面维护和更新升级时)需要重定向能力。如果不做重定向,用户的收藏和搜索引擎数据库中的旧地址只能让访客得到一个404或503错误信息页面降低了用户体验度,导致访问流量白白流失,且该页面积累的搜索引擎评分也会无效。