nginx学习总结(一)

时间:2025-04-02 08:59:22
    
2,nginx安装、常用命令和配置文件:/
    在linux系统中安装nginx,需要依赖(pcre、opensll、zlib)
        1,安装pcre
            wget /project/pcre/pcre/8.37/pcre-8.
            解压文件:.configure 完成后,回到 pcre目录下执行 make
            在执行   make && make install
            安装之后,pcre-config --version
        2,安装openssl
        3,安装zlib
            yum -y install make zlib zlib-devel gcc-c++libtool openssl-devel
        4,安装nginx
            下载 nginx后,进行解压 tar -xvf
            执行 ./configure
            最后执行 make && make install
            安装完成后在 usr 多出来一个文件夹 local/nginx,在sbin有启动脚本
            在sbin目录下执行 ./nginx
            查看 nginx状态  ps -ef|grep nginx
        5,设置防火墙
            查看开放的端口号:firewall-cmd --list-all
            设置开放的端口号:
                firewall-cmd --add-service=http -permanent
                firewall-cmd --add-port=8080/tcp --permanent
            重启防火墙:firewall-cmd --reload
    nginx常用命令
        nginx的命令操作必须进入到 /usr/local/nginx/sbin目录(默认安装路径)
        查看nginx版本:./nginx -v
        关闭nginx:./nginx -s stop
        启动nginx:./nginx
        重新加载:./nginx -s reload
        
    nginx配置文件
        nginx由三部分组成
        全局块:从配置文件到 events 块之间的内容,主要设置一些影响服务器整体运行的配置指令。
            主要包括 配置运行 Nginx服务器的用户(组)、允许生成的worker process数,进程ID存放路径、日志存放路径和类型以及配置文件的引入等。
            worker_processes  1;#表示可以支持的并发处理数,值越大处理的并发数越多,但受到硬件、软件等设备制约
        events块:主要影响Nginx服务器与用户网络连接,常用的设置包括是否开启对多 work process下的网路连接进行序列化,是否允许同时接收多个网络
                连接,选取哪种事件驱动模型来处理连接请求,每个word process可以同时支持的最大连接数等。主要是配置性能优化相关
        http块:包括 http全局块、server
                
    
3,nginx配置实例
    反向代理:
        一,简单请求
            1,如果是本地 windows电脑,想要通过 域名 映射到 ip:8080端口上,需要修改 hosts文件,增加一行 ip   进行映射
            2,在 中修改 http-server块
                server {
                    listen 80; #监听的端口,一般不用改
                    server_name  ip; #表示nginx所在的服务器 ip
                    # 表示当请求 nginx对应的ip:端口 时,进行转化的路由规则设置
                    location /{
                        root html;# 页面根路径
                        proxy_pass http://实际服务ip:端口; #实际转发到的地址
                        index   ;# 请求的入口页面
                    }
                }
            3,请求 ip:80 会路由转发到 proxy_pass 对应的实际地址
        二,不同请求转发到不同服务器
            访问 http://192.168.11.2:9001/edu 转发到 193.132.3.2:8080
            访问 http://192.168.11.2:9001/vod 转发到 193.132.3.3:8081
            server{
                listen   9001;
                server_name  192.168.11.2;
                
                location ~ /edu/{
                    proxy_pass http://193.132.3.2:8080;
                }
                
                location ~ /vod/{
                    proxy_pass http://193.132.3.3:8081;
                }
            }
            关于location 后不同符号表示的含义:= ~ ~* ^~
            =:用于不含正则表达式的 uri 前,要求请求字符串与uri严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求
            ~: 用于表示uri 包含正则表达式,并且区分大小写
            ~*: 用于表示uri包含正则表达式,并且不区分大小写
            ^~: 用于不含正则表达式的uri前,要求 nginx服务器找到标识uri和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location
                块中的正则 uri和请求字符串做匹配
            配置完成后需要开放对应端口号 如 9001    
            注:配置中允许存在多个 server块配置
                
    负载均衡
    一,简单的请求nginx的某个地址,路由到两台机器节点上,请求一次到A,在请求一次到B节点
        http{
            upstream myserver{
                # 轮询方式
                server 193.132.3.2:8080;
                server 193.132.3.3:8081;
                或
                # 权重  权重越高被分配的请求数越多
                server 193.132.3.2:8080 weight=5;
                server 193.132.3.3:8081 weight=10;
                # hash方式  客户的ip为A,请求到的服务器为 1,则后续会一直分配到服务器1
                ip_hash;
                server 193.132.3.2:8080;
                server 193.132.3.3:8081;
                # fair 按照后端服务器的响应时间来分配,响应时间短的优先分配
                server 193.132.3.2:8080;
                server 193.132.3.3:8081;
                fair;
            }
        }
        
        server{
            listen   9001;
            server_name  192.168.11.2;
            location /{
                proxy_pass http://myserver; #实际转发到的地址
                root html;# 页面根路径
                index   ;# 请求的入口页面
            }
        }
    
    动静分离
        一般使用 location 结合 expires参数(给一个资源设定一个过期时间,时间范围以内的则直接取nginx上的静态资源,否则从服务器上动态获取)
            如 3d表示3天
            一般错误码 304表示 超过过期时间后,从服务器抓取失败
        location /www/ {
            root  /data/;
            index ;
        }
        
        location /image/ {
            root  /data/;
            autoindex on; # 表示列出当前文件夹内所有文件,可以访问image目录,也可以指定目录里面的某个文件继续访问
        }
        最终访问:
            http://192.168.11.2/image/  或者访问指定文件 http://192.168.11.2/image/
            http://192.168.11.2/www/
        
        
6,nginx配置高可用集群
    一,准备工作
        1,准备两台机器(或多台机器)
        2,每台机器上安装nginx
        3,每台机器上安装 keepalived
            yum install keepalived -y
            rpm -q -a keepalived  # 检查是否安装成功
            安装之后在 etc下生成 keepalived目录,该目录下有 文件
    二,主从配置
        主服务器配置
        global_defs{
            notification_email{
                acassen@
                failover@
                sysadmin@
            }
            notification_email_from @
            smtp_server 192.168.17.29
            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 MASTER #备份服务器上将 MASTER改为 BACKUP
            interface ens33 #网卡  可通过在服务器上输入 ifconfig查看具体的网卡值
            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 //VRRP-H虚拟地址
            }
        }
        nginx_check.sh文件内容
        #!/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
        从服务器配置
        global_defs{
            notification_email{
                acassen@
                failover@
                sysadmin@
            }
            notification_email_from @
            smtp_server 192.168.17.29
            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 ens33 #网卡  可通过在服务器上输入 ifconfig查看具体的网卡值
            virtual_router_id 51 #主、备机的virtual_router_id必须相同
            priority 90 #主、备机取不同的优先级,主机值较大,备份机值较小
            advert_int 1
            authentication{
                auth_type PASS
                auth_pass 1111
            }
            virtual_ipaddress{
                192.168.17.50 //VRRP-H虚拟地址
            }
        }
        
        在启动完nginx后启动keepalived:system start
        最后访问虚拟地址 http://192.168.17.50 可以访问成功nginx默认页面
        停止keepalived:systemctl stop
        
7,nginx原理
    1,master和worker进程
        master进程拿到任务后,进行管理监控所有worker及任务
        任务一出来,所有worker进程争抢,然后通过tomcat进行处理
    2,worker如何工作
        每个worker间独立,相互之间没有联系
    3,设置多少个worker合适
        采用io多路复用机制,每个worker独立进程,worker数与cpu核数相同时最优
    4,worker连接数  worker_connection
        发送请求,worker占用 2个连接数 或者 4个连接数
        支持的最大并发数计算:worker_connection * worker_process / 2 或者 worker_connection * worker_process / 4