• Nginx


    Nginx概述

    1.什么是Nginx

    • 高性能的 HTTP 和反向代理web服务器

    2.为什么使用Nginx

    • 占内存少,并发能力强(5W)
    • 安装简单,配置文件简洁
    • 内置健康检查功能,不会再将请求发送到宕机节点
    • 节省宽带,支持GZIP压缩
    • 宕机的概率非常小,稳定性高
    • 接收用户请求是异步的
    • 轻量级,仅保留了HTTP需要的模块,其他都用插件的方式后天添加,适合二次开发, 如阿里巴巴Tengine

    3.正向代理与反向代理的区别

    • 正向代理
      在这里插入图片描述
    • 反向代理(Nginx):可以隐藏服务器IP,对安全有好处
      在这里插入图片描述

    4.Nginx的Master-Worker模式

    • Nginx可以在服务器不关闭的情况下刷新配置,那如何实现呢?
    • 可以通过Zookeeper的监听机制,但是这样的话,每次使用Nginx都还好带一台Zookeeper服务器,不好
    • 接下来看看Nginx如何做

    • 使用Master-Worker主从架构
      在这里插入图片描述

    5.Nginx采用Linux的epoll模型做到高并发下的高效处理5w/s

    • 配置文件nginx.conf位置
      在这里插入图片描述
    • epoll模型基于事件驱动机制,可监控多个事件是否准备完毕,如果OK那么异步的放入epoll队列中,worker只需从epoll队列循环处理即可
    • epoll也叫多路复用,准备完毕的进队,然后worker才处理
    ABC三个老师,他们都要帮助一个班级的学生解决课堂作业中的问题
    老师A采用从第一排开始一个学生一个学生轮流解答的方式,老师A浪费了很多时间,并且有的学生作业还没有完成老师就来了,反反复复效率极慢
    老师B是一个忍者,他发现老师A的方法行不通,于是他使用了影分身术,分身出好几个自己同一时间去帮好几个同学回答问题,最后还没回答完,老师B消耗光了能量累倒了
    老师C比较精明,他告诉学生,谁完成了作业举手,有举手的同学他才去指导问题,他让学生主动发声,分开了“并发”
    
    • 1
    • 2
    • 3
    • 4
    • 为什么Nginx性能高,正是因为Nginx采用异步非阻塞的事件处理机制,运用epoll模型,提供队列,排队解决问题

    6. Keepalived+Nginx实现高可用,避免单点故障问题

    • Nginx前再加一层Keepalived来维护心跳
      在这里插入图片描述

    7.利用Nginx完成对访问资源的动静分离

    • Nginx对静态资源的处理能力很强,但对动态资源的处理能力不足,所以需要配置动静分离
    • Nginx可以缓存静态资源,无需将请求转发给Tomcat

    • 静态资源放在nginx/html目录下
    • 动态资源请求转发给后端

    8.总结Nginx作用

    • 虚拟主机,反向代理,负载均衡
    • 动静分离,页面缓存

    Nginx配置详情

    1.nginx.conf结构讲解

    • 典型的分段配置文件
      在这里插入图片描述

    2.全局配置模板

    user	#系统使用用户
    worker_processes	#worker进程数,一般情况与CPU核数保持一致
    error_log	#nginx的错误日志
    pid		#nginx启动时的pid
    
    events {	#事件区块开始
        worker_connections	#每个进程允许最大连接数
        use		#nginx使用的内核模型
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3.Http配置模板

    http { 
        #设置日志模式
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
    	# Nginx访问日志存放位置
        access_log  /var/log/nginx/access.log  main;   
    
        sendfile on;	#开启高效传输模式
        tcp_nopush on;	#减少网络报文段的数量
        tcp_nodelay	on;
        keepalive_timeout 65;	#保持连接的时间,单位秒
        types_hash_max_size 2048;
    
        include	/etc/nginx/mime.types;	#文件扩展名与类型映射表
        default_type application/octet-stream;	#默认文件类型
    
    	#加载子配置项,配置另一个配置文件的位置
        include /etc/nginx/conf.d/*.conf;	
    
    	server { #向下看
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    4.Server配置模板

    http {
        #Http配置项目...
        
        #Server段配置信息
        server {
    	     listen 80;	#配置监听的端口
    	     server_name  localhost;	#配置监听的域名主机名
    	      
    	     #location段配置信息
    	     location / {
    		      root /usr/share/nginx/html;	#网站根目录
    		      index index.html index.htm;	#默认首页文件
    		      deny 172.168.22.11;	#禁止访问的IP地址,可以为all
    		      allow 172.168.33.44;	#允许访问的IP地址,可以为all
    	     }
    	     
    	     error_page 500 502 503 504 /50x.html;  	#5xx状态码对应的访问页面
    	     error_page 400 404 error.html;
        }
        
        server{ #可以有多个server
            ... ... 
        } 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    5.UpStream负载均衡配置

    • 负载均衡配置
    #服务器列表
    upstream balanceServer {
        #server 宿主机IP:服务Port;
        server 192.168.10.100:8090;
        server 192.168.10.100:8091;
        server 192.168.10.100:8092;
    }
    
    server { 
    	listen 80;	#虚拟机服务端口
    	
    	#防止域名冲突,需配置域名映射 C:\Windows\System32\drivers\etc\hosts中做域名映射:127.0.0.1 IPAddr
        server_name IPAddr;	#多个用,分开
        	
    	location /api {
    		proxy_pass http://balanceServer;	#负载均衡配置
    	}
    
    	#配置讲解
    	#经过上述配置后,当Client发送http://IPAddr:80/api请求则被nginx拦截到
    	#IPAddr:80被对应的server拦截
    	#/api被server下的对应location拦截
    	#localtion中的balanceServer被负载均衡后从上述3中IP:Port配置中选择一种替换
    	#最终请求变成http://192.168.10.100:8090/api
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 负载均衡算法配置
    1.轮询(默认),按事件先后顺序,若某服务宕机,可以自动剔除
    	upstream nginx {
    		server 172.17.0.4:8081;
    		server 172.17.0.5:8081;
    	}
    2.权重Weight,权重越大被分到的概率越高,合理有效的利用主机资源
    	upstream nginx {
    		server 172.17.0.4:8081 weight=2;
    		server 172.17.0.5:8081 weight=1;
    	}
    3.ip_hash,同IP访问固定服务,解决动态页面中IP共享问题
    	upstream nginx {
    		ip_hash;
    		server 172.17.0.4:8081;
    		server 172.17.0.5:8081;
    	}
    4.fair(第三方插件),可根据页面大小或加载时间长短智能的负载均衡
    	upstream nginx {
    		server 172.17.0.4:8081;
    		server 172.17.0.5:8081;
    		fair;
    	}
    5.url_hash(第三方插件)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    6.动静分离配置

    • 静态页面放入html目录下,html目录下的文件路径就是静态页面的访问路径
    • 配置location拦截静态页面请求转发
    location ~ ./*(html|css|js|img|image|images){
    	root /usr/local/nginx/html;
    }
    
    • 1
    • 2
    • 3

    7.常用的内置全局变量

    在这里插入图片描述

    8.以上配置完后需要nginx -s reload

  • 相关阅读:
    计算机毕业设计(附源码)python智慧景区一体化售票系统
    从转载阿里开源项目 Egg.js 技术文档引发的“版权纠纷”,看宽松的 MIT 许可该如何用?...
    redis 哨兵
    基于PHP+MySQL的动漫交流及动漫周边购物网站
    MySQL数据库——存储引擎(2)-存储引擎特点(InnoDB、MyISAM、Memory)、存储引擎选择
    【Linux命令】vim 多模式编辑
    golang大小端字节序
    【元宇宙欧米说】通过赛氪宇宙看像素艺术与元宇宙的碰撞
    ApacheDBUtils的使用
    基于Matlab实现评价型模型求解方法(附上源码+数据)
  • 原文地址:https://blog.csdn.net/weixin_51699336/article/details/125625173