Nginx:高性能服务器

2021-10-19 15:54:27 浏览数 (1)

Nginx

nginx的应用场景

简介

Nginx (“engine x”) 是一个高性能的 HTTP和反向代理服务器,特点是占有内存少,并发能 力强,事实上 nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用 nginx 网站用户有:百度、京东、新浪、网易、腾讯、淘宝等

作为 web 服务器的功能

Nginx可以作为静态页面的 web服务器,同时还支持 CGI协议的动态语言,比如 perl、php 等。但是不支持 java。Java程序只能通过与 tomcat配合完成。Nginx专为性能优化而开发, 性能是其最重要的考量,实现上非常注重效率 ,能经受高负载的考验,有报告表明能支持高 达 50,000个并发连接数。 https://lnmp.org/nginx.html

代理

正向代理 客户端要访问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。

反向代理 由反向代理服务器去选择目标服务器获取数据后,在返 回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器 地址,隐藏了真实服务器 IP地址。

负载均衡 我们单台机器无法支持运转的时候,可以横向扩充多台机器,将压力分散出去

动静分离

为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速 度。降低原来单个服务器的压力。

案例

反向代理案例一(无条件代理)

实现效果:使用 nginx反向代理,访问 www.123.com 直接跳转到 127.0.0.1:8080 我们需要修改本地的host文件,将 www.123.com 映射到 127.0.0.1

我们便可以通过 www.123.com:8080 访问到第一步出现的 Tomcat初始界面。

之后去编写nginx的配置文件

如上配置,我们监听 80端口,访问域名为 www.123.com,不加端口号时默认为 80端口,故 访问该域名时会跳转到 127.0.0.1:8080路径上。在浏览器端输入 www.123.com 结果如下:

反向代理案例二(有匹配规则的代理)

实现效果:使用 nginx反向代理,根据访问的路径跳转到不同端口的服务中 nginx监听端口为 9001, 访问 http://127.0.0.1:9001/edu/ 直接跳转到 127.0.0.1:8081 访问 http://127.0.0.1:9001/vod/ 直接跳转到 127.0.0.1:8082

我们需要有两个tomcat启动

一个启动80一个启动8081 之后配置nginx

location指令说明

1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配 成功,就停止继续向下搜索并立即处理该请求。 2、~:用于表示 uri 包含正则表达式,并且区分大小写。 3、~ **:用于表示 uri 包含正则表达式,并且不区分大小写。 4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字 符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。

注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识。

负载均衡

实现了访问一个路径,可以以轮询(一边一次的)方式去8080和8081两个端口访问 这里我们在两个tomcat里都准备好对应的文件

之后配置nginx

随着互联网信息的爆炸性增长,负载均衡(load balance)已经不再是一个很陌生的话题, 顾名思义,负载均衡即是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应 足够快,给用户很好的体验。快速增长的访问量和数据流量催生了各式各样的负载均衡产品, 很多专业的负载均衡硬件提供了很好的功能,但却价格不菲,这使得负载均衡软件大受欢迎, nginx就是其中的一个,在 linux下有 Nginx、LVS、Haproxy等等服务可以提供负载均衡服 务,而且 Nginx提供了几种分配方式(策略): 1、轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 dow n 掉,能自动剔除。 2、weight weight 代表权,重默认为 1,权重越高被分配的客户端越多 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 例如:

代码语言:javascript复制
upstream server_pool{
server 192.168.5.21 weight=10;
server 192.168.5.22 weight=10;
}

3、ip_hash 每个请求按访问ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。 例如:

代码语言:javascript复制
upstream server_pool{
ip_hash;
server 192.168.5.21:80;
server 192.168.5.22:80;
}

4、fa ir(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。

代码语言:javascript复制
upstream server_pool{
server 192.168.5.21:80;
server 192.168.5.22:80;
fair;
}

动静分离

Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和 静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx 处理静态页面,Tomcat处理动态页面。

我们现在我们的服务器上设置一个存放静态资源的文件

之后去写nginx的配置文件

重点是添加 location, 最后检查 Nginx 配置是否正确即可,然后测试动静分离是否成功,之需要删除后端 tomcat 服务器上的某个静态文件,查看是否能访问,如果可以访问说明静态资源 nginx 直接返回 了,不走后端 tomcat 服务器 效果图

到这里nginx常用的一些使用案例就总结完成了,

0 人点赞