• 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调优
  • 相关阅读:
    数据库中两张表之间的数据同步实现思路(增加、删除、更新)Mysql、sqlserver
    多台服务器之间如何让sqlserver,mysql数据库进行数据同步?
    mysql数据库同步时数据一致性的配置优化
    mysql 、sqlserver数据库,实时同步,增量同步(脚本模式)
    SyncNavigator 注册机 使用教程
    SyncNavigator数据库同步软件8.4.1 中文版
    HKROnline SyncNavigator破解版企业版 8.4.1 注册机使用教程
    SyncNavigator 破解版8.4.1 企业版 授权注册流程
    浅谈数据库高可用性(HA)技术
    软件工程第七周总结
  • 原文地址:https://www.cnblogs.com/wyf20190411-/p/15009213.html
Copyright © 2020-2023  润新知