目录
一、Nginx相关概念
1.1、Nginx概述
1.2、正向代理
1.3、反向代理
1.4、负载均衡
1.5、动静分离
二、Linux中Nginx安装
2.1、安装Nginx
2.2、防火墙设置
2.3、添加端口
2.4、重启防火墙
三、Nginx常用命令
3.1、Linux中常用命令
3.2、windows中常用命令
四、Nginx请求转发配置
4.1、如果你的后台是多个服务,有课程管理服务、文件上传服务,前端请求地址更换为nginx的地址
4.2、打开nginx配置文件nginx.cong,添加如下配置
4.3、总结:
五、负载均衡
5.1、负载均衡概念
1、轮询(默认)
2、weight
3、ip hash
4、fair(第三方)
5.2、nginx.config配置开始
1、打开nginx.conf配置文件、添加集群配置,这是两台服务器地址
2、监听端口8888,前端请求的地址为nginx的地址和端口:127.0.0.1:8888
3、总结:
六、Nginx配置文件
6.1、全局块
6.2、events块
6.3、http块
server块
location 块
七、Nginx原理
7.1、Nginx底层的流程
7.2、当master接收到重新加载的信号会怎么处理(./nginx -s reload)
7.3、worker进程是如何处理用户的请求呢?
八、问题
8.1、前端上传文件出现问题 413 Request Entity Too Large
Nginx 是一个高性能的HTTP和反向代理web服务器,特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。
Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率﹐能经受高负载的考验,有报告表明能支持高达50,000个并发连接数。
正向代理:如果把局域网外的 Internet想象成一个巨大的资源库,则局域网中的客户端要访问Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。
在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问。
反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。
单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。
nginx有两种安装方式的,我们选择一种安装方式
1、解压缩nginx-1.18.0.tar.gz包
解压命令:tar –zxvf nginx-1.18.0.tar.gz
2、进入解压缩目录,执行./configure
3、make && make install
安装完成之后在/usr/local 下面会生成nginx文件夹
4、安装完毕启动nginx
进入/usr/local/nginx/sbin 输入 ./nginx 便可启动
启动了nginx,浏览器输入ip:80没访问到
查看防火墙中开放的端口,使用命令:firewall-cmd --list-all
nginx监听端口80
命令:firewall-cmd --zone=public --add-port=80/tcp --permanent
命令:firewall-cmd --reload
再次访问192.168.0.104,成功访问,因为端口是80,可以不写。
使用Nginx操作命令前提是必须进入nginx的目录 /usr/local/nginx/sbin
查看ngixn版本号:./nginx -v
启动nginx ./nginx
关闭nginx ./nginx -s stop
安全退出 ./nginx -s quit
重新加载nginx ./nginx -s reload
查看启动进程
ps –ef|grep nginx
ps -aux|grep nginx
1、启动nginx:nginx.exe
2、停止nginx:nginx.exe -s stop 或者 nginx.exe -s quit
注:stop是快速停止nginx,可能并不保存相关信息;quit是完整有序的停止nginx,并保存相关信息。
3、重启nginx:nginx.exe -s reload
4、查看Nginx版本:nginx -v
配置了两个location,一个是eduservice 一个是eduoss ,这两个是后端接口访问地址,如果前端请求的路径包含eduservice,他就会把请求转发到 http://localhost:8001 服务上
如果前端请求的路径中包含eduoss,会把请求转发到 http://localhost:8002服务上
随着互联网信息的爆炸性增长,负载均衡(load balance)已经不再是一个很陌生的话题,顾名思义,负载均衡即是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应足够快,给用户很好的体验。快速增长的访问量和数据流量催生了各式各样的负载均衡产品,很多专业的负载均衡硬件提供了很好的功能,但却价格不菲,这使得负载均衡软件大受欢迎,nginx.就是其中的一个,在linux.下有Nginx、LVS、Haproxy.等等服务可以提供负载均衡服务,而且 Nginx,提供了几种分配方式(策略):
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
weight:代表权,重默认为1,权重越高被分配的客户端越多
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。例如:
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream card-rest-server{
server 12.33.22.147:8080;
server 12.33.22.144:8080;
keepalive 200; }
server {
listen 8888;
server_name 127.0.0.1;
charset utf-8;
location ^~/dynamic/ {
proxy_pass http://card-rest-server;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
nginx配置文件有三部分组成
从配置文件开始到 events 块之间的内容,主要会设置一些影响nginx 服务器整体运行的配置指令,主要包括配置运行Nginx服务器的用户(组)、允许生成的worker process 数,进程PID存放路径、日志存放路径和类型以及配置文件的引入等。
worker_processes 1;
这是Nginx服务器并发处理服务的关键配置,worker_processes值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约。
events 模块涉及的指令主要影响Nginx服务器与用户的网络连接,常用的设置包括是否开启对多 work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 wordprocess可以同时支持的最大连接数等。
上述例子就表示每个work process支持的最大连接数为1024.
这部分的配置对Nginx的性能影响较大,在实际中应该灵活配置。
这算是Nginx服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里
http块可以有多个server块,每个server 块可以同时包含多个 locaton块。
这块的主要作用是基于Nginx服务器接收到的请求字符串(例如server_name/uri-string ),对虚拟主机名称(也可以是IP别名)之外的字符串(例如前面的/uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
总体配置如:
在nginx启动后,会有一个master进程和多个worker进程,master进程主要用来管理worker进程,包括:接受信号,将信号分发给worker进程,监听worker进程工作状态,当worker进程退出时(非正常),启动新的worker进程。基本的网络事件会交给worker进程处理。多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的 。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。 worker进程的个数是可以设置的,一般我们会设置与机器cpu核数一致,这里面的原因与nginx的进程模型以及事件处理模型是分不开的 。
master会重新加载配置文件,然后启动新的进程,使用的新的worker进程来接受请求,并告诉老的worker进程他们可以退休了,老的worker进程将不会接受新的,老的worker进程处理完手中正在处理的请求就会退出。
首先master会根据配置文件生成一个监听相应端口的socket,然后再faster出多个worker进程,这样每个worker就可以接受从socket过来的消息(其实这个时候应该是每一个worker都有一个socket,只是这些socket监听的地址是一样的)。当一个连接过来的时候,每一个worker都能接收到通知,但是只有一个worker能和这个连接建立关系,其他的worker都会连接失败,这就是所谓的惊群现在,为了解决这个问题,nginx提供一个共享锁accept_mutex,有了这个共享锁后,就会只有一个worker去接收这个连接。当一个worker进程在accept这个连接之后,就开始读取请求,解析请求,处理请求,产生数据后,再返回给客户端,最后才断开连接,这样一个完整的请求就是这样的了。
如果你前端请求的是nginx代理地址,Nginx默认的request body为1M
解决方案
打开nginx的配置文件nginx.conf,加入 client_max_body_size 100m,然后重启nginx