美文网首页
初识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高级配置

    阅读之前,建议先阅读初识 Nginx。 之后,我们来了解一下 Nginx 配置。 抽象来说,将 Nginx 配置为...

  • 你真的了解如何将 Nginx 配置为Web服务器吗

    阅读之前,建议先阅读初识 Nginx。 之后,我们来了解一下 Nginx 配置。 抽象来说,将 Nginx 配置为...

  • 初识Nginx

    layout: posttitle: "初识Nginx"date: 2016-04-25 21:11:48 +08...

  • 初识Nginx

    注意:当前稳定版本为nginx1.14.1 Nginx源码编译 注意:rewrite模块需要pcre支持;gzip...

  • 初识 Nginx

    Nginx 是一个免费的,开源的,高性能的HTTP服务器和反向代理,以及IMAP / POP3代理服务器。 Ngi...

  • 初识Nginx

    1、下载&安装 nginx模块依赖以下库:gzip模块需要zlib库、rewrite模块需要pcre库、ssl功能...

  • 初识Nginx

    Nginx是什么? Nginx(engine x)是一个轻量级Web服务器。Nginx(engine x)是一个高...

  • Nginx初识

    介绍 Ngix是一种服务器软件,故而其最主要、最基本的功能当然是可以与服务器硬件结合,让程序员可以将程序放在Ngi...

  • nginx初识

    Nginx (一)简介和基本的功能作用

  • 初识Nginx

    我是一个Android开发,但是一个应用端的工程师,势必是需要学习一些前端和后端的知识。T字型人才的“一超多会多了...

网友评论

      本文标题:初识Nginx

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