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)

    

posted @ 2022-03-28 17:00  Quent1nCn  阅读(20)  评论(0编辑  收藏  举报