nginx

nginx:

1.网络模型相关基础点
    1.1内核空间与内核空间:
        一个操作系统的核心组件,称之为内核,独立于普通的应用程序,可以直接操作底层硬件,处理系统受保护的区域
    操作系统为了保护系统的核心区域,也就是内核,使得用户无法直接修改系统底层,因此操作系统就开辟了两块虚拟空
    间,一是内核空间,二是用户空间
    
    1.2进程切换
        为了控制进程的执行,操作系统的内核需要有能力挂起cpu上运行的进程,还能恢复之前已挂起的进程
    
    1.3进程阻塞    
        正在执行的进程,由于某些事件的等待,比如资源的加载中,资源加载失败,操作系统自动的就会阻塞该进程,
    调用内核的block语句,让该进程处于阻塞状态,因此阻塞的进程是一种主动的行为    
    
    1.4文件描述符
        这是计算机科学里的一个术语,表示指向文件引用的一个抽象概念,文件描述符是一个索引值,指向linux内核为每一
    个进程打开的文件做记录的一个表
    程序每打开一个文件,系统内核就向该进程发送一个文件描述符  
    ulimit -n  查看系统默认的文件描述符多大
    
    1.5 linux IO
        对linux的文件读写操作
        数据的io操作:eg文件的读取,数据优先被拷贝的操作系统的内核缓冲区,然后再从缓冲区拷贝到应用程序的内存空间
        
        本地io:
            1.等待数据准备   
            2.数据从内核空间拷贝的用户进程空间
        网络io
            1.等待网络上的数据分段到达,然后复制到内核的缓冲区
            2.数据从内核缓冲区拷贝到用户空间的应用程序
        
        网络应用主要面临两个问题,数据计算,网络io延迟
        网络的延迟,是造成性能低下的最大原因

        网络io指的是在网络中进行数据的读,写操作,本质就是一个socket读写,sockte在linux中被抽象为流的概念



2.nginx基本语法
    1.下载安装
        1.1三大版本
            nginx.com 商业版
            nginx.org 开源版
            https://tengine.taobao.org/ 
        1.2安装配置笔记
            1.操作系统的选择
            2.下载nginx的方式
                1.rpm安装
                2.yum工具自动化安装
                3.获取源代码,手动编译安装nginx(指定安装路径,额外的开启nginx第三方的功能)
            3.编译安装 ,要解决好linux的编译开发环境, gcc,make 编译工具 
            使用yum工具之前,必须配置好阿里云的yum源
            0.确保有wget命令
                yum install wget -y
            1.备份旧的yum仓库文件
                mkdir /etc/yum.repos.d/repobak
                   mv /etc/yum.repos.d/* /etc/yum.repos.d/repobak
            2.配置新的repo仓库文件
                访问阿里云的镜像站: https://developer.aliyun.com/mirror/
                生成新的yum源
                清空旧的 yum缓存 yum clean all
                生成新的 yum缓存 yum makecache(加速下次下载)
                  
            3. yum install -y  gcc gcc-c++ autoconf automake make 
            
            # 安装 nginx所需的一些第三方系统库的支持, gzip lib库, pcre库, openssl 等待数据准备
            4. yum install zlib zlib-devel openssl openssl-devel pcre pcre-devel wget httpd-tools vim
                
            5. 加载完所需的基础依赖库,还得 检查系统的防火墙是否关了,selinux关闭,yum配置,网络情况等..
                iptables -L
                getenforce
            6.nginx 编译安装    
                1.下载程序源代码
                    wget http://nginx.org/download/nginx-1.21.1.tar.gz
                    wget http://tengine.taobao.org/download/tengine-2.3.2.tar.gz
                2.解压源码
                    tar -zxvf  xxx.tar.gz
                    进入源码目录
                        auto          -检测系统模块依赖信息
                        changes       -存放nginx的变化记录日记
                        conf          -存放 nginx 主配置文件的目录
                        configure     -可执行的脚本,用于释放编译文件的定制脚本
                        contrib       -提供了vim插件,让配置文件颜色区分
                        html          -存放标准的html页面
                        src           -存放nginx源码的目录            
                
                3.编译三部曲
                    第一曲:进入软件源代码目录,执行编译脚本文件,如指定安装路径,及开启额外功能等
                       1.      ./configure --help   查看编译信息
                        
                       2.执行编译脚本文件,释放makefile等信息
                            ./configure --prefix=/opt/tngx232 --with-http_ssl_module  --with-http_flv_module --with-http_gzip_static_module
                         --with-http_stub_status_module --with-threads --with-file-aio    
                    第二曲:直接开始下一步安装 输入make指令 
                    第三曲:如同windows的安装   make install
                
                4.配置path环境变量  把nginx的sbin目录添加到path当中
                    export PATH="$PATH:/opt/tngx232/sbin/"
                    
                5.退出当前会话,重新登录,系统默认重新加载 /etc/profile.d下的所有环境变量文件                     
    2.配置文件语法
        * nginx.conf是由指令和指令块组成
        * 每行语句都得有封号结束,指令与参数之间是由空格分隔的
        * 指令块可以有大括号{}组织多条语句
        * nginx.conf 使用#表示注释符
        * nginx支持用$变量名该语法
        * nginx 支持 include语句组合多个配置文件
        * nginx部分指令支持正则表达式,如rewrite重写指令
    
    3.Nginx命令行
        1. nginx启动的指令, -s参数 指的是给nginx进程发送某种信号
            nginx   初次启动,直接输入nginx,如启动后再执行该命令,会提示端口冲突(可以先停止nginx,再启动)
            nginx -s stop      #停止nginx进程
            nginx -s reload    #平滑启动,利用reload可以在不重启nginx进程的情况下,重新读取配置文件
        2.查看nginx命令的帮助信息
            --nginx -h
            
            参数                含义
            -?,-h               输出nginx的帮助信息
            -v                  列出nginx的版本号
            -V                  列出nginx的版本和编译参数信息
            -t                  检测nginx的配置文件,语法是否正确
            -T                  检查配置,然后输出配置信息
            -q                  在检查配置文件期间屏蔽非错误信息
            -s                  给nginx主进程发送一个主信号,分别有 stop停止运行, quit优雅的停止,reload重读配置文件,reopon重新记录nginx日志
            -p                  设置nginx目录前缀
            
        3.nginx 信号传递
            1.nginx 主进程是不处理请求的,而是分配请求发给worker进程,主进程负责重启,热加载,热部署
            2.master是根据nginx.conf中 worker_process定义启动时创建的进程数
            3.当worker运行后,master就处于一个等待的状态,等待用户请求来临,或者系统信号
            4.系统管理员可以发送 kill指令,或者nginx -s 信号,这样的形式操控nginx
            
        4.nginx信号集
            nginx -s 对应的信号功能如下
            
            参数          信号           含义
            stop          TERM           强制关闭服务
            null          INT            强制关闭整个服务
            quit          QUIT           优雅的关闭整个服务
            reopen        USR1           重新打开日志记录
            reload        HUB            重新读取配置文件,并且优雅的退出旧的worker 
            
    4.功能模块
    5.日志功能
        0.日志切割:线上很常见的操作,能够控制单个日志文件的大小,便于对日志进行管理
        1.针对访客日志进行切割
            [root@iZuf66isl5i5hdqvge6jpqZ logs]# ll -h
            total 100K
            -rw-r--r-- 1 root root  79K Jul 12 22:35 access.log
            -rw-r--r-- 1 root root 8.9K Jul 12 21:58 error.log
            -rw-r--r-- 1 root root    6 Jul 12 00:05 nginx.pid
        2.给当前日志文件重命名 注意使用mv命令
            mv access.log `access.log_$(date + "%Y-%m-%d")`  
        3.发信号给nginx主进程,给他发送一个重新打开的信号,让nginx生成新的日志文件
            nginx -s reopen # 该命令 等同于kill -USR1 `cat nginx.pid`
        4.注意在以上的nginx重命名日志切割,不要立即对文件修改,而是要注意等待几秒钟,因为nginx的工作模式特点,
          master下发指令给worker去干活,刚发指令的时候只是一个标记,当业务量很大的时候,这个修改操作可能会有
          点慢,不会立即生效
        5.在生产环境下,日志切割主要是以定时任务的形式来操作
            编写一个定时切割日志的脚本
            vim cut_nginx_log.sh
            #!/bin/bash
            logs_path="/opt/tngx232/logs/"
            mkdir -p ${logs_path}$(date -d "yesterday" + "%Y")/$(date -d "yesterday" + "%m")
            mv ${logs_path}access.log ${logs_path}$(date -d "yesterday" + "%Y")/$(date -d "yesterday"
            + "%m")/access_%(date -d "yesterday" + "%Y-%m-%d").log
            nginx -s reopen 
            #kill -USR1 `cat /opt/tngx232/logs/nginx.pid`
            
            完事后 可主动执行    bash cut_nginx_log.sh
            
        6.把该脚本的执行,加入crontab 每天0点执行
            crontab -e #打开定时任务      
            0 0 * * * /bin/bash  /myscripts/cut_nginx_log.sh
            注: 定时任务要绝对路径,否则定时任务会失效 
    6.访问限制
    
3.nginx功能实践
    静态站点
    反向代理
    负载均衡
    缓存服务
    url重写
    动静态请求分离
    https
    lua开发
    nginx安全
    nginx调优

 

posted @ 2021-07-14 08:17  54菜鸟  阅读(49)  评论(0编辑  收藏  举报