Nginx


Nginx

Nginx简介

  • 反向代理
  • 负载均衡
  • 动静分离
  • 高可用

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

**正向代理:**客户端依靠代理服务器(即在客户端配置代理服务器)从局域网向internet访问。

在这里插入图片描述

**反向代理:**反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。

在这里插入图片描述

负载均衡

在这里插入图片描述

**动静分离:**动态资源和静态资源分散到不同服务器上。也可以认为使用 nginx 处理静态页面,tomcat 处理动态页面。

通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。

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

在这里插入图片描述


Nginx命令

如果是直接在linux中用压缩包安装的话,nginx使用命令时必须在/usr/local/nginx/sbin下执行命令。

  • 开启nginx:./nginx

  • 关闭nginx:./nginx -s stop

  • 重新加载nginx:./nginx -s reload

但是本人用的是docker,经过我的测试,进入容器后可以不用在/usr/local/nginx/sbin下执行命令,而是在根目录就可以执行。

  • 查看nginx版本:nginx -v

  • 开启nginx:nginx

  • 关闭nginx:nginx -s stop

  • 重新加载nginx:nginx -s reload


Nginx配置文件

Nginx配置文件分为三大块儿:

  • 全局块:从配置文件开始到 events 块 之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。

  • events块:events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。

  • http块:配置最频繁的部分,如反向代理,负载均衡,动静分离,高可用。代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。需要注意的是:http 块也可以包括 http 全局块、server 块

三大块中的小块:

  • http全局块:http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。

  • server:这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。

  • 全局server块:最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。

  • location 块:一个 server 块可以配置多个 location 块。这块的主要作用是基于 Nginx 服务器接收到的请求字符串(server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。


注意:docker的所在宿主机的位置 /var/lib/docker/容器ID,并且可以在 .json结尾的文件中修改容器对外映射端口号。然后重启docker即可。


Nginx实例

浏览器通过访问nginx反向代理服务器实现对tomcat主页的访问。

在这里插入图片描述

在进行反向代理过程中,location块有时会有正则表达式:

在这里插入图片描述

  • docker的nginx容器反向代理配置:进入nginx.conf文件,在 http块 下的 server块 配置 (listen - - - >外部访问端口号 和 server_name - - ->外部访问ip ),之后在 server 块的 location块中配置 (proxy_pass http://ip:port; ),必要时可以在location后加入正则表达式。

在这里插入图片描述

在这里插入图片描述

  • docker的nginx容器负载均衡配置:进入nginx.conf文件,在http 块下的 server块 上方加入 upstream myserver 块并配置(server ip:port; ),同样在server块中配置 listen 和 server_name ,在server块的location块中配置(proxy_pass http://myserver; )

在这里插入图片描述

在这里插入图片描述

Nginx的负载均衡策略:

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

  • weight:weight 代表权重,默认为 1,权重越高被分配的客户端越多。

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

  • docker的nginx容器动静分离配置,在根目录下创建了 /nginxstatic/www 和 /nginxstatic/image 两个文件充当静态资源,并在nginx.conf的 location块 中配置。

在这里插入图片描述


Nginx原理

linux查看应用进程:ps -ef | grep 应用名

在这里插入图片描述

在这里插入图片描述

一个master和多个worker的好处:

  • 利于进行热部署。

  • 每个worker是独立的进程,不需要加锁(节省了锁的开销),如果有一个worker出现了问题,其他worker会继续争抢,实现请求过程,不会造成服务器的中断。

**注意:**worker 数和服务器的 cpu 数相等是最为适宜的。

连接数 work_connection:

这个值是表示每个 worker 进程所能建立连接的最大值,所以,一个 nginx 能建立的最大连接数,应该是 worker_connections * worker_processes。当然,这里说的是最大连接数,对于HTTP 请 求 本 地 资 源 来 说 , 能 够 支 持 的 最 大 并 发 数 量 是 worker_connections * worker_processes,如果是支持 http1.1 的浏览器每次访问要占两个连接,所以普通的静态访问最大并发数是: worker_connections * worker_processes /2,而如果是 HTTP 作 为反向代理来说,最大并发数量应该worker_connections * worker_processes/4。因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务的连接,会占用两个连接。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值