美文网首页
初识Nginx

初识Nginx

作者: 9c46ece5b7bd | 来源:发表于2018-11-18 16:59 被阅读99次

    注意:当前稳定版本为nginx1.14.1

    Nginx源码编译

    注意:rewrite模块需要pcre支持;gzip模块需要zlib库支持[pcre-devel|zlib-devel]

    bash-4.1# tar -zxf nginx-1.14.1.tar.gz 
    bash-4.1# cd nginx-1.14.1
    bash-4.1# yum install gcc gcc-c++ tar  pcre-devel zlib-devel -y
    bash-4.1# ./configure --prefix=/export/servers/nginx --user=admin --group=admin
    ....
    ....
    Configuration summary
      + using system PCRE library
      + OpenSSL library is not used
      + using system zlib library
    
      nginx path prefix: "/export/servers/nginx"
      nginx binary file: "/export/servers/nginx/sbin/nginx"
      nginx modules path: "/export/servers/nginx/modules"
      nginx configuration prefix: "/export/servers/nginx/conf"
      nginx configuration file: "/export/servers/nginx/conf/nginx.conf"
      nginx pid file: "/export/servers/nginx/logs/nginx.pid"
      nginx error log file: "/export/servers/nginx/logs/error.log"
      nginx http access log file: "/export/servers/nginx/logs/access.log"
      nginx http client request body temporary files: "client_body_temp"
      nginx http proxy temporary files: "proxy_temp"
      nginx http fastcgi temporary files: "fastcgi_temp"
      nginx http uwsgi temporary files: "uwsgi_temp"
      nginx http scgi temporary files: "scgi_temp"
    
    
    bash-4.1# make && make install 
    
    # 查看nginx源码目录结构
    bash-4.1# tree -L 2 /nginx-1.14.1
    /nginx-1.14.1
    |-- auto                                # 编译过程中所需要的一些模块信息
    |   |-- cc
    |   |-- define
    |   |-- endianness
    |   |-- feature
    |   |-- have
    |   |-- have_headers
    |   |-- headers
    |   |-- include
    |   |-- init
    |   |-- install
    |   |-- lib
    |   |-- make
    |   |-- module
    |   |-- modules
    |   |-- nohave
    |   |-- options
    |   |-- os
    |   |-- sources
    |   |-- stubs
    |   |-- summary
    |   |-- threads
    |   |-- types
    |   `-- unix
    |-- CHANGES
    |-- CHANGES.ru
    |-- conf                                # 默认的配置文件,编译成功后会被拷贝到工作目录
    |   |-- fastcgi.conf
    |   |-- fastcgi_params
    |   |-- koi-utf
    |   |-- koi-win
    |   |-- mime.types
    |   |-- nginx.conf
    |   |-- scgi_params
    |   |-- uwsgi_params
    |   `-- win-utf
    |-- configure                           # 预编译命令
    |-- contrib                             # 自带的一些perl和vim工具配置[比如vim下的配置可以打开配置文件的高亮模式]
    |   |-- geo2nginx.pl
    |   |-- README
    |   |-- unicode2nginx
    |   `-- vim
    |-- html                                # 默认的html静态页面,编译成功会被拷贝到工作目录
    |   |-- 50x.html
    |   `-- index.html
    |-- LICENSE
    |-- Makefile                            # 编译的编排配置文件
    |-- man                                 # 帮助文档
    |   `-- nginx.8
    |-- objs                                # 编译过程生成的一些中间库,src底下是一些基本模块
    |   |-- autoconf.err
    |   |-- Makefile
    |   |-- nginx
    |   |-- nginx.8
    |   |-- ngx_auto_config.h
    |   |-- ngx_auto_headers.h
    |   |-- ngx_modules.c
    |   |-- ngx_modules.o
    |   `-- src
    |-- README
    `-- src                                # nginx源码的核心模块
        |-- core
        |-- event
        |-- http
        |-- mail
        |-- misc
        |-- os
        `-- stream
    
    # 查看nginx编译后的工作目录结构
    bash-4.1# tree -L 2 /export/servers/nginx/
    /export/servers/nginx/
    |-- conf
    |   |-- fastcgi.conf
    |   |-- fastcgi.conf.default
    |   |-- fastcgi_params
    |   |-- fastcgi_params.default
    |   |-- koi-utf
    |   |-- koi-win
    |   |-- mime.types
    |   |-- mime.types.default
    |   |-- nginx.conf
    |   |-- nginx.conf.default
    |   |-- scgi_params
    |   |-- scgi_params.default
    |   |-- uwsgi_params
    |   |-- uwsgi_params.default
    |   `-- win-utf
    |-- html
    |   |-- 50x.html
    |   `-- index.html
    |-- logs
    `-- sbin
        `-- nginx
    
    # 默认生效的nginx配置
    bash-4.1# cat /export/servers/nginx/conf/nginx.conf
    worker_processes  1;
    events {
        worker_connections  1024;
    }
    http {
        #默认支持的mime标准类型
        include       mime.types;   
        #指定默认的mime类型[包含bin exe dll|deb|dmg|iso img|msi msp msm]                 
        default_type  application/octet-stream; 
        #开启高效传输文件模式[如果不开启,默认用户态会先申请一个buffer]                                
        sendfile        on;     
        #长连接的会话保持[表示客户端关闭浏览器后在超时时间内链接依然使用该链接]                                
        keepalive_timeout  65;                                                                  
    
        # server部分
        server {
            listen       80;
            server_name  localhost;
            location / {
                #指定URL下的资源根路径
                root   html;   
                #指定默认的资源类型以及归类                                 
                index  index.html index.htm;                    
            }
            #error_page的重定向[其中状态码必须为between 300 and 599]
            error_page    500 502 503 504  /50x.html;            
           #指定相关错误页的存放位置 
           location = /50x.html {                                                           
                root   html;
            }
        }
    }
    
    
    bash-4.1# /export/servers/nginx/sbin/nginx -t -c /export/servers/nginx/conf/nginx.conf
    nginx: the configuration file /export/servers/nginx/conf/nginx.conf syntax is ok
    nginx: [emerg] getpwnam("admin") failed
    nginx: configuration file /export/servers/nginx/conf/nginx.conf test failed
    
    # 没有检测到admin用户
    
    # 指定配置文件启动nginx
    bash-4.1# /export/servers/nginx/sbin/nginx -c /export/servers/nginx/conf/nginx.conf
    
    # 可以看到启动Nginx之后会生成一些临时目录信息
    sh-4.1# tree -L 2 /export/servers/nginx/
    /export/servers/nginx/
    |-- client_body_temp
    |-- conf
    |   |-- fastcgi.conf
    |   |-- fastcgi.conf.default
    |   |-- fastcgi_params
    |   |-- fastcgi_params.default
    |   |-- koi-utf
    |   |-- koi-win
    |   |-- mime.types
    |   |-- mime.types.default
    |   |-- nginx.conf
    |   |-- nginx.conf.bak
    |   |-- nginx.conf.default
    |   |-- scgi_params
    |   |-- scgi_params.default
    |   |-- uwsgi_params
    |   |-- uwsgi_params.default
    |   `-- win-utf
    |-- fastcgi_temp
    |-- html
    |   |-- 50x.html
    |   `-- index.html
    |-- logs
    |   |-- access.log
    |   |-- error.log
    |   `-- nginx.pid
    |-- proxy_temp
    |-- sbin
    |   `-- nginx
    |-- scgi_temp
    `-- uwsgi_temp
    后会默认多几个配置文件
    
    

    此时,访问本机的80端口即可访问Nginx提供的静态站点了。

    Nginx的其他介绍

    注意:上面我们讲解了如何快速源码编译一个Linux版本的Nginx来提供web服务,这章详细介绍下Nginx的使用场景。

    Nginx使用场景 Nginx的优点 Nginx的组成部分 Nginx配置语法 Nginx配置参数时间单位 Nginx配置参数空间单位

    基本在Nginx运维过程中,都是在对http部分的配置进行维护。


    http配置指令块

    Nginx架构基础

    Nginx的请求处理流程 Nginx的进程结构 Nginx命令行维护

    注意:我们在维护Nginx过程中,通常会使用到sbin/nginx -s 来执行一些维护管理操作,而对应的指令其实是向Nginx进程发送相应的信号来实现的。具体对应关系我们可以在Nginx源码中找到。

    bash-4.1# cat /nginx-1.14.1/src/core/ngx_config.h
    ....
    #define NGX_SHUTDOWN_SIGNAL      QUIT
    #define NGX_TERMINATE_SIGNAL     TERM
    #define NGX_NOACCEPT_SIGNAL      WINCH
    #define NGX_RECONFIGURE_SIGNAL   HUP
    
    #if (NGX_LINUXTHREADS)
    #define NGX_REOPEN_SIGNAL        INFO
    #define NGX_CHANGEBIN_SIGNAL     XCPU
    #else
    #define NGX_REOPEN_SIGNAL        USR1
    #define NGX_CHANGEBIN_SIGNAL     USR2
    #endif
    ....
    

    从文中定义,我们其实可以知道nginx -s reload对应的HUP信号;nginx -s stop 对应的是TERM信号;nginx -s reopen对应USR1信号;nginx -s quit对应QUIT信号。
    USR2和WINCH信号通常用于热升级:

    热升级流程1
    热升级流程2
    1. 备份原来的nginx二进制文件
    2. kill -USR2 ${Nginxpid} 
    3. 新老nginx产生的worker进程都在运行,但是不会有新的请求
    4. 关闭老的nginx的worker进程[kill -WINCH ${Nginxpid}]
    

    USR1信号通常用于备份Nginx日志:

    1. 备份nginx日志文件【cp access.log access-${date}.log】
    2. 执行nginx的reopen命令【./nginx -s reopen】 
    2.1 或者kill -USR1 ${Nginxpid}
    
    Nginx进程管理-信号 reload流程1 reload流程2

    Nginx的模块分类

    nginx的模块分类

    Nginx进程间的通讯方式

    image.png 跨worker通信使用共享内存

    Nginx容器

    • 数组
    • 链表
    • 队列
    • 哈希树
    • 红黑树
    • 基数树


      哈希表
    哈希表结构 红黑树 时间复杂度 红黑树使用的模块

    相关文章

      网友评论

          本文标题:初识Nginx

          本文链接:https://www.haomeiwen.com/subject/ybugfqtx.html