【JAVAEE基础学习(15)】--简述nginx

本文详细介绍了Nginx的安装步骤、反向代理、负载均衡和动静分离的实现,包括正向代理与反向代理的区别、如何配置负载均衡策略、以及如何进行动静分离以优化服务。同时,还探讨了Nginx与Tomcat的配合使用,以及通过Keepalived实现高可用的Nginx集群。
摘要由CSDN通过智能技术生成

一、作用:
    反向代理(和tomcat一起用)
    动静分离(静态资源)
    负载均衡

    正向代理:
        多台计算机通过一台服务器访问互联网,这台服务器称为正向代理
    反向代理:
        多台服务器通过一台服务器与互联网连接,这台服务器称为反向代理
    负载均衡:
        请求分发
    动静分离:
        将动态请求和静态请求分开

二、安装步骤:
    tar -zxvf pcre安装tar包
    cd pcre目录
    ./configure
    make
    make install
    cd ..

    tar -zxvf openssl核安装tar包
    cd openssl目录
    ./config
    make && make install
    cd ..

    tar -zxvf zlib安装tar包
    cd zlib目录
    ./configure
    make && make install
    cd ..

    tar -zxvf nginx安装tar包
    cd nginx目录
    ./configure
    make && make install


    查看防火墙状态
    systemctl status firewalld
     
    打开特殊端口:
    firewall-cmd --zone=public --add-port=80/tcp --permanent
     
    重新加载
    firewall-cmd --reload
     
    查看已经打开的防火墙端口
    firewall-cmd --list-all

tip:在linux中存在6个常用目录,在这六个常用目录中的命令可以在任何地方启用,这六个常用目录分别是:/bin(/usr/bin,/usr/local/bin),/sbin(/uer/sbin,/usr/local/sbin)

三、nginx基本命令:
    进入nginx目录:cd /usr/local/nginx/sbin
    在nginx目录中的sbin目录下启动nginx服务:./nginx
    查看nginx服务是否启动:ps -ef|grep nginx
    关闭nginx服务:./nginx -s stop
    重新加载nginx服务:./nginx -s reload
    访问nginx服务器:http://ip:80
    conf中的nginx.conf内容{
        一、全局块{
            用于配置全局变量
        }
        二、事件块{
            用于配置事件,如配置最大连接数量
        }
        三、http块{
            http全局块
            server块
        }
    }

四、代理实验
    反向代理实验一{
        访问www.123.com直接跳转到127.0.0.1:8080
        在Windows中配置域名映射:
            在C:\Windows\System32\drivers\etc下找到hosts,在里面配置
            ip 映射地址(目标linux的ip地址 www.lixxkv.com)
        在cat nginx.conf中{
            server_name  linux自身网址;
            location / {
                添加
                proxy_pass http://目标linux的ip地址:8080;
                
            }
        }
        修改好后在sbin中执行./nginx -s reload
        报错:
            nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
        解决:
            /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
            在sbin中执行./nginx -s reload
    }
    反向代理实验二{
        访问http://目标linux的ip地址:9000(自定义nginx服务器的端口)/edu/index.html直接跳转到8080服务器
        访问http://目标linux的ip地址:9000(自定义nginx服务器的端口)/vod/index.html直接跳转到8081服务器

        在nginx.conf中{
            listen     配置监听端口9000;
            server_name  linux自身网址ip;
            location ~ /edu/ {
                proxy_pass http://linux自身或其他网址ip:8080;
            }

            location ~ /vod/ {
                proxy_pass http://linux自身或其他网址ip:8081;
            }
        }
    }

    location指令说明:
        语法{
            location [ = , ~ , ~* , ^~ ] uri{}
        }
        =:严格匹配uri,不含正则表达式,优先级最高
        ~:区分大小写的匹配含正则表达式的uri,
        ~*:不区分大小写的匹配正则表达式的uri,优先级高于普通匹配
        ^~:不含有正则表达式的uri匹配(反正则),优先级高于正则匹配
        /:普通匹配,优先级最低

五、负载均衡(load balance):
    实例一{
        分别在80和81两个端口的tomcat中部署同一个静态资源
        在nginx的配置文件中进行负载均衡,在nginx.conf中{
            upstream myserver{
                server 同一目标linux的ip地址:8080;
                server 同一目标linux的ip地址:8081;
            }

            server{
                location{
                    proxy_pass http://myserver;
                }
            }
        }
    }
    负载均衡算法:
        轮询(默认);
        带权重的轮询{
            默认权重为1,权重越高得到的负载越大
            在nginx中修改权重:在nginx.conf中{
                upstream myserver{
                    server 同一目标linux的ip地址:8080 weight=1;
                    server 同一目标linux的ip地址:8081 weight=3;
                }
            }
        }
        轮询带来的问题:session不一致,解决方法常用redis服务器、ip_hash
        ip_hash{
            将ip的最后一个字节或url除2取余,同余数请求到同一个服务器
            在nginx中修改权重:在nginx.conf中设置ip_hash算法{
                upstream myserver{
                    ip_hash;
                    server 同一目标linux的ip地址:8080;
                    server 同一目标linux的ip地址:8081;
                }
            }
            在使用ip_hash算法后,轮询的权重无意义
            缺点:缺点在ip集中分布且分布不均情况下可能导致负载不均
        }
        fair(第三方):
            根据服务器的响应时间来分配请求,响应时间短的优先分配
        upstream myserver中的其他参数:
            server ip:port down----此服务器处于宕机状态
            server ip:port backup----此服务器是备用服务器,随时接替down机

六、动静分离:
    将动态资源和静态资源分开
    nginx通过正在匹配不同的后缀名称实现请求的不同转发
    动静分离实例一{
        将静态资源data放到根目录下
        在nginx的配置文件中进行动静分离,在nginx.conf中{
            location /image/ {
                root /data/;
                autoindex on;    #以列表形式展示静态资源
            }

            location /www/ {
                root /data/;
                index index.html index.html;
            }

        }

    }
    动静分离实例二{
        将静态资源data放到根目录下
        在80和81端口的tomcat的webapps下编写带有静态资源连接的jsp{
            直接访问tomcat则无法加载静态资源,通过静态资源服务器可以获取图片
            location /image/{ root /data/;}
        }
        通过宿主机对jsp进行代理访问
    }

七、Nginx+Keeplived高可用:
    集群的目的之一是为了高可用
    单点故障{
        起因:没有集群的唯一一台nginx挂了
        解决:利用keeplived将nginx做主从备份
        解决方式:在主nginx挂之前,监控主nginx的keeplived回想各个带有keeplived的nginx发出通知,然后通过权重机制、ip机制等进行主nginx的选择
    }
    安装keepalived法一{
        tar -zxvf keepalived-1.4.2.tar.gz -C /usr/local/src
        yum install -y gcc openssl-devel popt-devel
        cd /usr/local/src/keepalived-1.4.2
        ./configure --prefix=/usr/local/keepalived
        make && make install
        cp /usr/local/src/keepalived-1.2.18/keepalived/etc/init.d/keepalived /etc/init.d/
        mkdir /etc/keepalived
        cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
        cp /usr/local/src/keepalived-1.2.18/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
        cp /usr/local/keepalived/sbin/keepalived /usr/sbin

    }
    安装keepalived法二{
        cd /usr
        yum install keepalived -y
        rpm -q -a keepalived
        cd /etc
        /etc/keepalived/keepalived.conf
    }
    在/etc/keepalived/下编写.pl的故障通知脚本(可以上网自己找找),并且通过chmod为脚本添加可执行权限
    在/etc/keepalived/下编写nginx_check.sh的shell脚本{
        #!/bin/bash
        A=`ps -C nginx --no-header | wc -l`
        if [ $A -eq 0 ]
        then
            #killall keepalived
            echo "nginx server is died"
            systemctl stop keepalived
            #service keepalived stop
        fi
    }
    keepalived配置文件结构{

        总体结构:{
            全局定义{
                邮件通知
            }
            同步组{
                管理服务器虚拟机实例,采用vrrp(虚拟路由冗余协议,监控多个网段的实例)协议
                在同步组中会将网段分为内网网段和外网网段
            }
            心跳检测{
                检测nginx主机是否正常工作
                做权重修改
            }
            实例{
                定义主从
                明确网卡
                自定义虚拟路由标识
                定义权重区分主从
                以秒为单位心跳检测
                设置验证类型和密码
                设置虚拟ip地址
                应用上面的vrrp_scrip定义的脚本名称
            }
        }

        一主一备模式{
            #全局配置
            global_defs {
                router_id lixxkvone
            }

            #同步组
            vrrp_sync_group VG_1{#监听
                group {
                    VI_1 #实例管理
                }
                notify_master /etc/keepalived/sendmail.pl #发邮件
                #notify_backup /etc/keepalived/sendmail.pl
            }

            vrrp_script chk_nginx { #检测nginx
                script /etc/keepalived/nginx_check.sh #调用检测脚本
                interval 2 #每隔2秒检测一次
                weight 20 #权重,通过权重调整主备关系
            }

            vrrp_instance VI_1 {
                state MASTER 或 BACKUP #区分主从nginx
                interface ens33 #个人主机的网卡名称{查网卡名称:ip a}
                virtual_router_id 51 #虚拟路由id,在一主多备情况下保持一致,多主多备情况下按一组一个id区分
                priority 100 或 90 #设置优先级,以优先级大的作为主机
                advert_int 1 #心跳检测,每隔1秒检测一次
                #noopreempt #主备争抢模式
                authentication {    #权限
                    auth_type PASS
                    auth_pass 1111
                }
                track_script { #设置检测脚本
                    chk_nginx
                }
                virtual_ipaddress {# 虚拟ip,在一套主备中虚拟ip要求一致
                    主虚拟目录   或   备虚拟目录
                    
                }
            }
        }

        双主模式{
            #全局配置
            global_defs {
                router_id lixxkvone
            }

            #同步组
            vrrp_sync_group VG_1{#监听
                group {#实例管理
                    VI_1 #主备一
                }
                notify_master /etc/keepalived/sendmail.pl #发邮件
                #notify_backup /etc/keepalived/sendmail.pl
            }

            vrrp_script chk_nginx { #检测nginx
                script /etc/keepalived/nginx_check.sh #调用检测脚本
                interval 2 #每隔2秒检测一次
                weight 20 #权重,通过权重调整主备关系
            }

            vrrp_instance VI_1 {
                state MASTER 或 BACKUP
                interface ens33 #个人主机的网卡名称{查网卡名称:ip a}
                virtual_router_id 51 #虚拟路由id,在一主多备情况下保持一致,多主多备情况下按一组一个id区分
                priority 100 或 90 #设置优先级,以优先级大的作为主机
                advert_int 1 #心跳检测,每隔1秒检测一次
                #noopreempt #主备争抢模式
                authentication {    #权限
                    auth_type PASS
                    auth_pass 1111
                }
                track_script { #设置检测脚本
                    chk_nginx
                }
                virtual_ipaddress {# 虚拟ip,在一套主备中虚拟ip要求一致
                    虚拟目录1 dev ens33 label ens33:1     
                }
            }

            vrrp_instance VI_2 {
                state BACKUP 或 MASTER
                interface ens33 #个人主机的网卡名称{查网卡名称:ip a}
                virtual_router_id 52 #虚拟路由id,在一主多备情况下保持一致,多主多备情况下按一组一个id区分
                priority 90 或 100 #设置优先级,以优先级大的作为主机
                advert_int 1 #心跳检测,每隔1秒检测一次
                #noopreempt #主备争抢模式
                authentication {    #权限
                    auth_type PASS
                    auth_pass 1111
                }
                track_script { #设置检测脚本
                    chk_nginx
                }
                virtual_ipaddress {# 虚拟ip,在一套主备中虚拟ip要求一致      
                        虚拟目录2 dev ens33 label ens33:2      
                }

            }
        }
    }
    在配置好keepalived配置文件后,分别在两台linux中使用命令
    systemctl start keepalived.service
    启动keepalived,使用
    ps -ef|grep keepalived
    查看keepalived进程,在keepalived进程中有
    - core:负责主进程的启动,维护和全局配置文件的加载
    - check:负责健康检查
    - vrrp:用来实现vrrp协议
    使用
    systemctl stop keepalived
    关闭keepalived

八、Nginx原理{
    进程:master;worker
    master作用:监控客户端,
    worker作用:负责对接客户端(竞争形式)
    master-worker形式的好处:worker是独立进程,不用加锁;独立进程间互不影响;多个worker间可以相互替补
    nginx通redis一样采用了io多路复用机制,每个worker都是一个独立进程,但每个独立进程只有一个主线程,通过异步非阻塞的方式来处理请求。worker数和我放弃的cpu数相等式最为适宜
    一个worker对应最大连接数为1024
    nginx可以处理的最大请求并发数
        nginx的总链接数:worker_连接数*woker_进程
        静态请求访问:一个请求占用两个连接,worker_连接数*woker_进程/2
        动态请求访问:一个请求占用四个请求,worker_连接数*woker_进程/4
    nginx的日志所在位置/usr/local/nginx
    关于nginx的事件配置:{
        woeker_connection 1024
        use epoll;设置
        multi_accept on:设置并发量大时缓解客户端等待时间
        accept_mutex on;使得master派指worker抢占锁
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值