Nginx总结
Nginx:
Nginx是一个高性能的HTTP和反向代理的web项目,专门为性能优化而开发。支持热部署,可以支持7x24小时持续使用
反向代理:
正向代理:
我们局域网访问一个Internet里面的任意资源的时候,都是需要通过正向代理去实现访问的:我们访问外网的时候,走代理就是这个状态
C 代理 S
反向代理:
反向代理就是暴露一个反向代理服务器地址给客户端,隐藏了真实服务的地址,这样我们访问代理服务器的时候,代理服务器会替我们寻找资源并返回给用户
就像SpringCloud的gateway一样,通过网关分发服务
C 反向代理
负载均衡:(类似Ribbon或者OpenFeign)
一个服务被高并发访问的时候,如果是单一服务器面对高并发,很容易造成宕机等异常,所以我们可以通过配置服务集群,实现负载均衡,让每一个服务都能被调用,均匀的分配并发请求
即增加服务器数量,通过负载均衡把请求分发到不同服务器
动静分离:
为了加快网站的的解析速度,可以把动态页面和静态页面分发由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力
安装依赖文件:
pcre
zlib
OpenSSL
常用命令:
nginx -s stop停止 reload重启
nginx -c 配置文件地址 启动nginx
nginx -v 查看版本
nginx配置文件由三部分组成:
全局块:
设置nginx整体运行的指令
worker_process 1 nginx并发处理量,越大处理的并发就越多
events块:
配置nginx服务器与用户网络的连接
worker_connection 1024 nginx允许最大的连接量
http块:
配置最频繁的部分,代理、缓存、日志等都在这里配置
http全局块:
文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求数上限等
server块:
与虚拟主机有密切关系,经常配置。里面又包含全局server和局部location块
全局server块:
监听端口、主机名称
局部location:
路径中的请求跳转
配置nginx反向代理:
1.实现效果:
打开浏览器,输入我们Nginx地址可以直接跳转到tomcat的主页面中
2.实现:
准备工作:
nginx安装
在linux安装tomcat
新建网页放入tomcat的访问目录
配置nginx:
配置server块的hostname与location块的断言
location块断言中,可以配置:location [= / ~ / ~* / ^~] uri
= 完全匹配路径
^~ 匹配URL路径,而不是正则匹配
~ 正则匹配路径,严格区分大小写
~* 正则匹配路径,不区分大小写
内部的proxy_pass后面跟需要代理的地址:
如果在proxy_pass后面的uri加/,表示绝对根路径;
如果没有/,表示相对路径,把匹配的路径部分也给代理走。
就是说我们需不需要留着location后面的参数,如果需要就加上/,不需要就不加
启动nginx
测试路径:http://192.168.238.137:nginx端口/路径
会跳转到http://127.0.0.1:8080/路径
3.踩坑:
多服务器时的端口配置
可以通过查看log文件来查看错误
配置nginx负载均衡:
1.默认采用轮询
2.实现:
在nginx->http块中添加upstream块,表示有哪些是需要被调用的:upstream后面需要添加名字,用于给proxy_pass转发
location块 -> proxy_pass后面跟需要转发的upstream名称:由于现在是动态转发,所以使用负载均衡分发给upstream中的服务器
3.负载均衡策略:
3.1:轮询(默认)
3.2:权重:在server后面配置weight
3.3:公平:在upstream块配置fair,寻找响应时间最短的服务器进行响应
3.4:Hash:以ip计算哈希值,分配给某一服务器使用,即我们hash值计算出来后,有唯一的服务器提供服务
配置Nginx的动静分离:
1.把静态的资源交由Nginx转发,而动态资源交给tomcat去处理
2.配置nginx的静态配置文件:
配置location块,后面跟着请求的地址,而参数不是填proxy_pass了,而是填root+静态文件的根路径,例如在kali里面我设置成了/home/kali/static/文件夹
如果需要开启目录表的话,就开启autoindex on,这样访问路径就能有目录了
3.如果要访问动态资源,就可以转发到tomcat,例如proxy_pass + tomcat地址
Nginx集群(主从):
1.避免单点故障,需要实现高可用
2.配置nginx主从:
keepalived属性,用于查看该节点是否还在
需要两台nginx、keepalived服务、需要虚拟IP
准备工作:
两个虚拟机环境:
一个作为MASTER,一个作为BACKUP,都安装keepalived和nginx
在虚拟机中准备配置keeplived:
global_defs { #这是全局配置
notification_email { #如果进行了切换发送邮件给谁
****@qq.com
}
smtp_server 192.168.17.129
smtp_connect_timeout 30
router_id LVS_DEVEL #这是比较重要的,以上都不重要
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh" #检测脚本位置
interval 2 #(检测脚本执行的间隔)
weight 2 #当触发脚本之后,修改权值
}
vrrp_instance VI_1 {
state BACKUP # 备用服务器上将 MASTER 改为 BACKUP
interface eth0 //网卡
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1 #多久发送一次心跳包
authentication { #两台机都必须一样
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.17.50 # 虚拟IP:虚拟地址
}
}
配置检测脚本(shell脚本):
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
实现:
可以通过在MASTER中使用ifconfig查看虚拟地址是否配置好了
在windows访问虚拟地址,就可以通过keepalived走入MASTER地址,如果keepalived的检测脚本检测到MASTER宕机了,就会转到备用机上
Nginx的工作方式:
一个master对应多个worker,worker采用抢占式的方式进行任务(例如反向代理这些)。如果当一个worker在工作的时候,他将不会参加下一轮抢占环节。
一个worker同时产生的连接数可能是2个或者4个:
当访问静态资源的时候,不需要寻找tomcat等服务器,那就是只连接Nginx,连接数只有两个;
如果访问动态资源,类似我们要连接tomcat/mysql这些服务器的时候,同时产生的连接数就是4个
计算最大并发数: worker数 * worker支持的最大连接数 / 2(4)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?