5.31 Nginx最全面知识
资料参考: https://blog.csdn.net/qq_40036754/article/details/102463099, https://www.runoob.com/w3cnote/nginx-setup-intro.html
-
nginx是什么
-
nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定,所以现在很多知名的公司都在使用nginx。
-
nginx的优点
-
占内存小,可以实现高并发连接、处理响应快。
-
可以实现http服务器、虚拟主机、反向代理、负载均衡。
-
nginx配置简单
-
可以不暴露真实服务器IP地址
-
应用场景
-
http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
-
虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
-
反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。
-
这个技术的核心和原理
-
nginx可实现的功能
-
nginx实现反向代理
-
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器
-
启动一个Tomcat 127.0.0.1:8080,使用nginx反向代理 8080.baidu.com 直接跳转到127.0.0.1:8080
-
Host文件新增:
-
nginx.conf 配置
-
反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问。
-
我们只 需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返 回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器 地址,隐藏了真实服务器 IP 地址。
-
nginx实现负载均衡
-
负载均衡是什么?
-
负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
-
负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
-
nginx解决网站跨域问题
-
nginx配置防盗链
-
nginx配置DDOS
-
限制请求次数和速度
-
动静分离
-
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速 度。降低原来单个服务器的压力。
-
Nginx 的原理
-
mater 和 worker
-
nginx 启动后,是由两个进程组成的。master(管理者)和worker(工作者)。
-
一个nginx 只有一个master。但可以有多个worker
-
过来的请求由master管理,worker进行争抢式的方式去获取请求。
-
master-workers 的机制的好处
-
首先,对于每个 worker 进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销, 同时在编程以及问题查找时,也会方便很多。
-
可以使用 nginx –s reload 热部署,利用 nginx 进行热部署操作
-
其次,采用独立的进程,可以让互相之间不会 影响,一个进程退出后,其它进程还在工作,服务不会中断,master 进程则很快启动新的 worker 进程。当然,worker 进程的异常退出,肯定是程序有 bug 了,异常退出,会导致当 前 worker 上的所有请求失败,不过不会影响到所有请求,所以降低了风险。
-
设置多少个 worker
-
Nginx 同 redis 类似都采用了 io 多路复用机制,每个 worker 都是一个独立的进程,但每个进 程里只有一个主线程,通过异步非阻塞的方式来处理请求, 即使是千上万个请求也不在话 下。每个 worker 的线程可以把一个 cpu 的性能发挥到极致。所以 worker 数和服务器的 cpu 数相等是最为适宜的。设少了会浪费 cpu,设多了会造成 cpu 频繁切换上下文带来的损耗。
-
worker 数和服务器的 cpu 数相等是最为适宜
-
连接数 worker_connection
-
第一个:发送请求,占用了 woker 的几个连接数?2 或者 4 个
-
第二个:nginx 有一个 master,有四个 woker,每个 woker 支持最大的连接数 1024,支持的 最大并发数是多少?
-
普通的静态访问最大并发数是: worker_connections * worker_processes /2,
-
而如果是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections * worker_processes/4
-
这个技术的使用方式
-
在linux上使用和安装
-
在Centos下,yum源不提供nginx的安装,可以通过切换yum源的方法获取安装。也可以通过直接下载安装包的方法,以下命令均需root权限执行:
-
首先安装必要的库(nginx 中gzip模块需要 zlib 库,rewrite模块需要 pcre 库,ssl 功能需要openssl库)。选定/usr/local为安装目录,以下具体版本号根据实际改变。
-
Nginx 的常用命令和配置文件
-
自动生成/usr/local/nginx/目录
-
./nginx -v 查看版本
-
./nginx 启动
-
./nginx -s stop 关闭
-
./nginx -s reload 重新加载
-
./nginx -t 检查是否正常
-
pkill ./nginx 强制杀进程
-
配置文件/usr/local/nginx/conf/nginx.conf目录文件
-
nginx 的组成部分nginx 文件结构
-
全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
-
events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
-
http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
-
server块:配置虚拟主机的相关参数,一个http中可以有多个server。
-
location块:配置请求的路由,以及各种页面的处理情况
-
几个常见配置项
-
1.$remote_addr 与 $http_x_forwarded_for 用以记录客户端的ip地址;
-
2.$remote_user :用来记录客户端用户名称;
-
3.$time_local : 用来记录访问时间与时区;
-
4.$request : 用来记录请求的url与http协议;
-
5.$status : 用来记录请求状态;成功是200;
-
6.$body_bytes_s ent :记录发送给客户端文件主体内容大小;
-
7.$http_referer :用来记录从那个页面链接访问过来的;
-
8.$http_user_agent :记录客户端浏览器的相关信息;
-
配置集群方式
-
Nginx 反向代理
-
实现:浏览器地址栏输入地址 www.123.com,跳转到 liunx 系统 tomcat 主页 面中
-
准备工作:Tomcat安装
-
a. 第一步 在 windows 系统的 host 文件进行域名和 ip 对应关系的配置
-
第二步 在 nginx 进行请求转发的配置(反向代理配置)
-
最终测试
-
Nginx + Keepalived高可用集权
-
Keepalived是什么
-
一个免费开源的,用C编写的类似于layer3, 4 & 7交换机制软件,具备我们平时说的第3层、第4层和第7层交换机的功能。主要提供loadbalancing(负载均衡)和 high-availability(高可用)功能,负载均衡实现需要依赖Linux的虚拟服务内核模块(ipvs),而高可用是通过VRRP协议实现多台机器之间的故障转移服务。
-
配置准备
-
需要两台nginx 服务器
-
需要keepalived
-
需要虚拟IP
-
配置高可用的准备工作
-
需要两台服务器 208.208.128.122 和 208.208.128.85
-
在两台服务器安装 nginx(流程最上面有)第二台服务器的默认端口 改为 9001 ,运行并测试,
-
在两台服务器安装 keepalived
-
安装之后,在 etc 里面生成目录 keepalived,有文件 keepalived.conf 。这个就是主配置文件。主从模式主要在这个文件里配置。
-
修改/etc/keepalived/keepalivec.conf 配置文件
-
在/usr/local/src 添加检测脚本
-
开启nginx 和 keepalived
-
在浏览器地址栏输入 虚拟 ip 地址 192.168.17.50测试
-
Nginx 动静分离
-
Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和 静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx 处理静态页面,Tomcat 处理动态页面。动静分离从目前实现角度来讲大致分为两种:
-
一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;
-
另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开。
-
Nginx 负载均衡 配置实例
-
nginx 分配服务器策略随着互联网信息的爆炸性增长,负载均衡(load balance)已经不再是一个很陌生的话题, 顾名思义,负载均衡即是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应 足够快,给用户很好的体验。快速增长的访问量和数据流量催生了各式各样的负载均衡产品, 很多专业的负载均衡硬件提供了很好的功能,但却价格不菲,这使得负载均衡软件大受欢迎, nginx 就是其中的一个,在 linux 下有 Nginx、LVS、Haproxy 等等服务可以提供负载均衡服 务,而且 Nginx 提供了几种分配方式(策略):
-
轮询(默认)每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
-
weight:weight 代表权重, 默认为 1,权重越高被分配的客户端越多
-
ip_hash:ip_hash 每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器
-
fair(第三方):fair(第三方),按后端服务器的响应时间来分配请求,响应时间短的优先分配。
努力不一定成功,但不努力一定会失败~