注意:当前稳定版本为
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运维过程中,都是在对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
信号通常用于热升级:
热升级流程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容器
- 数组
- 链表
- 队列
- 哈希树
- 红黑树
-
基数树
哈希表
网友评论