nginx高性能web服务器详解(搭建一个web服务器)


1、Nginx简介

1.1、Nginx概念及作用

概念:Nginx是高性能的HTTP和反向代理的web服务器,特点是占有内存少,由于它处理高并发能力非常强大,常用于高并发场景,能经受高负载的考验。

Nginx 专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。

1.2、正向代理

我们需要在客户端配置代理服务器,此时将代理服务器和客户端看成一个客户端,这样服务器就不知道是哪个客户端发送的请求,通过代理服务器进行访问,这就是正向代理

Nginx学习笔记详解:反向代理,负载均衡,动静分离

1.2、反向代理

反向代理:客户端对反向代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端。

反向代理服务器和目标服务器对外就是一个服务器,所以我们需要把它们看成一个服务端,暴露的是代理服务器 IP 地址,隐藏了真实服务器 IP 地址,这样客户端就不知道请求最后到底发送给哪台服务器

Nginx学习笔记详解:反向代理,负载均衡,动静分离

1.3、负载均衡

单个服务器解决不了大量请求,所以我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,这就是我们所说的负载均衡

Nginx学习笔记详解:反向代理,负载均衡,动静分离

1.4、动静分离

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

Nginx学习笔记详解:反向代理,负载均衡,动静分离

2、Nginx常用命令

由于该文章是关于Nginx的操作笔记,所以这里不会讲解如何在Linux上安装Nginx

注意:使用Nginx操作命令前提,必须进入到Nginx目录 /usr/local/nginx/sbin

常用命令:

  1. 查看Nginx版本号:./nginx -v
Nginx学习笔记详解:反向代理,负载均衡,动静分离

2.启动Nginx:./nginx

Nginx学习笔记详解:反向代理,负载均衡,动静分离

3.关闭Nginx:./nginx -s stop

Nginx学习笔记详解:反向代理,负载均衡,动静分离

4.重新加载Nginx:./nginx -s reload

Nginx学习笔记详解:反向代理,负载均衡,动静分离

3、Nginx配置文件

首先我们需要知道Nginx配置文件的位置:

/usr/local/nginx/conf/nginx.conf

Nginx学习笔记详解:反向代理,负载均衡,动静分离

Nginx配置文件有3部分组成:

  1. 全局块

从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令

比如:worker_processes 1

这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约

2.events块

events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接

比如:worker_connections 1024

表示每个 work process 支持的最大连接数为 1024
这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。

3.http块

Nginx学习笔记详解:反向代理,负载均衡,动静分离

这算是 Nginx 服务器配置中最频繁的部分

需要注意的是:http 块也可以包括 http 全局块、server 块。

4、Nginx配置实例

4.1、反向代理

4.1.1、反向代理准备工作

实现效果:

打开浏览器,输入地址www.123.com,跳转到Linux系统上的Tomcat主页面

注意:进行案例演示之前,请确保Linux上已经安装Nginx和Tomcat!

  1. 进入到tomcat的bin目录中,输入命令启动服务器:./startup.sh
  2. 对外开放访问的端口:firewall-cmd –add-port=8080/tcp –permanent
  3. 重启防火墙:firewall-cmd –reload
  4. 在window系统中通过浏览器访问tomcat服务器
Nginx学习笔记详解:反向代理,负载均衡,动静分离

5.访问过程分析:

Nginx学习笔记详解:反向代理,负载均衡,动静分离

4.1.2、反向代理实例(一)

  1. 在windows系统的host文件进行域名和ip对应关系的配置,访问路径为:C:WindowsSystem32driversetc
Nginx学习笔记详解:反向代理,负载均衡,动静分离

2.在nginx中进行请求转发配置(反向代理)

Nginx学习笔记详解:反向代理,负载均衡,动静分离

3.最终打开网址输入:www.123.com,测试成功

4.1.3、反向代理实例(二)

实现效果:

使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中

nginx 监听端口为 9001 访问


http://192.168.50.128:9001/edu/a.html 直接跳转到 127.0.0.1:8080


http://192.168.50.128:9001/vod/a.html 直接跳转到 127.0.0.1:8081

  1. 在/usr/src目录下创建两个文件夹分别是:tomcat8080,tomcat8081,将tomcat压缩包分别拖入到两个文件夹中,并解压:tar -xvf apache-tomcat-7.0.70.tar.gz,解压完成后启动两个tomcat
  2. 分别在两个tomcat中的webapps目录下存放edu文件和vod文件,文件夹下分别存放两个html页面,用于测试
  3. 找到nginx配置文件,进行方向代理配置
Nginx学习笔记详解:反向代理,负载均衡,动静分离

4.开放对外访问的端口号,语法如下:

firewall-cmd --add-port=端口号/tcp --permanent

5.进行测试

4.2、负载均衡

实现效果:浏览器输入
http://192.168.50.128/edu/a.html,负载均衡效果,将请求轮询形式转发到8080,8081端口

  1. 准备两台tomcat服务器,一台是8080,另一台是8081
  2. 在两台tomcat的webapps目录中,分别创建edu文件夹,在edu中放入a.html文件
  3. 在nginx配置文件中的http块进行负载均衡的配置
Nginx学习笔记详解:反向代理,负载均衡,动静分离

随着互联网信息的爆炸性增长,负载均衡(load balance) 已经不再是一个很陌生的话题,负载均衡即是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应足够快,给用户很好的体验。

Nginx 提供了几种分配方式(策略):

1.轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。

2.weight:weight 代表权,重默认为 1,权重越高被分配的客户端越多指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。

Nginx学习笔记详解:反向代理,负载均衡,动静分离

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

Nginx学习笔记详解:反向代理,负载均衡,动静分离

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

Nginx学习笔记详解:反向代理,负载均衡,动静分离

4.3、动静分离

Nginx学习笔记详解:反向代理,负载均衡,动静分离

通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。具体 Expires 定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用 Expires 来缓存),我这里设置 3d,表示在这 3 天之内访问这个 URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码 304,如果有修改,则直接从服务器重新下载,返回状态码 200。

4.3.1、动静分离准备工作

在Linux系统根目录中创建data文件夹,文件夹中存放两个文件夹分别为:

  1. www
  2. image
  3. 在www中放入a.html文件,在image文件夹中放入01.jpg图片

4.3.2、动静分离实例

  1. nginx配置文件中进行配置
Nginx学习笔记详解:反向代理,负载均衡,动静分离

2.将nginx服务器进行重新启动

3.最终进行测试

在浏览器中输入地址:
http://192.168.50.128/image/01.jpg

Nginx学习笔记详解:反向代理,负载均衡,动静分离

因为配置文件 autoindex on

Nginx学习笔记详解:反向代理,负载均衡,动静分离

在浏览器中输入地址:
http://192.168.50.128/www/a.html

5、Nginx工作原理解析

1.master & worker

Nginx学习笔记详解:反向代理,负载均衡,动静分离

2.worker如何进行工作

Nginx学习笔记详解:反向代理,负载均衡,动静分离

3.master-workers 的机制的好处

(1)可以使用 nginx –s reload 热部署,利用 nginx 进行热部署操作
(2)每个 woker是独立的进程,如果有其中的一个 woker 出现问题,其他 woker 独立的,继续进行争抢,实现请求过程,不会造成服务中断

4.设置多少个 woker 合适?

worker 数和服务器的 cpu 数相等是最为适宜的

5.连接数 worker_connection

第一个:发送请求,占用了 woker 的几个连接数?
答案:2 或者 4 个

第二个:nginx 有一个 master,有四个 woker,每个 woker 支持最大的连接数 1024,支持的最大并发数是多少?
普通的静态访问最大并发数是: worker_connections * worker_processes / 2,

而如果是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections * worker_processes/4

Nginx学习笔记详解:反向代理,负载均衡,动静分离

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发表评论

登录后才能评论