原课程地址:https://www.bilibili.com/video/BV1og411T76d?p=1
001-Nginx课程内容介绍
None
002-Nginx背景介绍
一个具有高性能的HTTP 和反向代理 的WEB服务器 ,同时也是一个POP3,SMTP,IMAP代理服务器 ,完全开源。
1.Web服务器 2.HTTP协议 3.POP3,SMTP,IMAP 4.反向代理
反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。
003-常见服务器的对比
004-Nginx的优点
- 速度更快,并发更高
- 配置简单,扩展性强
- 高可靠性
- 热部署
- 成本低,BSD许可证
关于开源许可证: 所以我们可以免费的将Nginx应用在商业领域。
两个应用:
OpenRestry [Nginx+Lua] Tengine[淘宝]
005-Nginx的功能特性及常用功能
主要包括以下三种:
基本http服务: 高级http服务:
邮件服务:
Nginx常用的功能模块:
- 静态资源部署
- Rewrite地址重写:正则表达式
- 反向代理
- 负载均衡:轮询,加权轮询,ip_hash,url_hash,fair
- Web缓存
- 环境部署:高可用的环境
- 用户认证模块
Nginx的核心组成:
- nginx二进制可执行文件
- nginx.conf配置文件
- error.log错误日志文件
- access.log访问日志文件
006-Nginx的官方简介
官网:http://nginx.org
007-Nginx系统环境准备
- 关闭运行的防火墙,系统重新启动后,防火墙将重新打开:
systemctl stop firewalld - 永久关闭防火墙,系统重新启动后,防火墙依然关闭:
systemctl disable firewalld - 查看防火墙状态:
systemctl status firewalld
[root@izbp1i6xv0q1dyvetecayhz selinux]
/etc/selinux
[root@izbp1i6xv0q1dyvetecayhz selinux]
SELINUX=disabled
SELINUXTYPE=targeted
008-Nginx安装方式介绍及源码安装的准备工作
如果通过Nginx源码安装需要提前准备的内容:
-
首先需要gcc编译器; -
PCRE库: -
zlib: -
OpenSSL:
009-通过Nginx源码简单安装
- 使用wget下载源码:
wget http://nginx.org/download/nginx-1.20.1.tar.gz - 创建目录进行包管理:
mkdir -p nginx/core ,mv xx.tar.gc nginx.core - 解压缩:
tar -zxvf xx.tar.gc - 检查:
./configure - 编译:
make - 安装:
make install
安装路径:/usr/local/nginx 目录结构:
[root@izbp1i6xv0q1dyvetecayhz local]
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.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
010-通过yum安装nginx-上
None
011-通过yum安装nginx-下
None
012-简单源码安装与yum安装的区别
源码简单安装,通过./nginx -V 查看版本及相关配置信息:
[root@izbp1i6xv0q1dyvetecayhz sbin]
nginx version: nginx/1.20.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
configure arguments:
对于使用yum安装的情况,其configure 参数情况更复杂: configure 脚本检查编译环境,然后生成makefile文件。
编译器在开始工作前要知道当前的系统环境,比如安装的位置要在哪里、要依赖什么组件等等,由于每台电脑的环境不一样,可以通过configure配置文件指定编译参数。运行这个脚本就可以获知编译参数,编译器就可以灵活地实现针对你个人电脑的“私人定制”,这也是linux源码安装的一个优势。 用户也可以自定义参数,比如假设我们要自定义安装目录,可以./configure --prefix=/usr/local/apache2。又比如假如要动态库和静态库一起编译,使用./config shared --prefix=/usr/local --openssldir=/usr/local/ssl。
013-通过Nginx源码复杂安装
PATH:是和路径相关的配置信息
with:是启动模块,默认是关闭的
without:是关闭模块,默认是开启的
一些简单的路径配置:
--prefix=PATH
指向Nginx的安装目录,默认值为/usr/local/nginx
--sbin-path=PATH
指向(执行)程序文件(nginx)的路径,默认值为<prefix>/sbin/nginx
--modules-path=PATH
指向Nginx动态模块安装目录,默认值为<prefix>/modules
--conf-path=PATH
指向配置文件(nginx.conf)的路径,默认值为<prefix>/conf/nginx.conf
--error-log-path=PATH
指向错误日志文件的路径,默认值为<prefix>/logs/error.log
--http-log-path=PATH
指向访问日志文件的路径,默认值为<prefix>/logs/access.log
--pid-path=PATH
指向Nginx启动后进行ID的文件路径,默认值为<prefix>/logs/nginx.pid
--lock-path=PATH
指向Nginx锁文件的存放路径,默认值为<prefix>/logs/nginx.lock
如何卸载nginx:
./nginx -s stop
rm -rf /usr/local/nginx
make clean
通过源码指定参数复杂安装:
[root@izbp1i6xv0q1dyvetecayhz nginx-1.20.1]
> --sbin-path=/usr/local/nginx/sbin/nginx \
> --modules-path=/usr/local/nginx/modules \
> --conf-path=/usr/local/nginx/conf/nginx.conf \
> --error-log-path=/usr/local/nginx/logs/error.log \
> --http-log-path=/usr/local/nginx/logs/access.log \
> --pid-path=/usr/local/nginx/logs/nginx.pid \
> --lock-path=/usr/local/nginx/logs/nginx.lock
014-Nginx目录结构分析
conf 目录下是相关配置文件。
关于CGI:
公共网关接口(Common Gateway Interface,CGI)是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展服务器功能。CGI 应用程序能与浏览器进行交互,还可通过数据API与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据。格式化为HTML文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。几乎所有服务器都支持CGI,可用任何语言编写CGI,包括流行的C、C ++、Java、VB 和Delphi 等。CGI分为标准CGI和间接CGI两种。标准CGI使用命令行参数或环境变量表示服务器的详细请求,服务器与浏览器通信采用标准输入输出方式。间接CGI又称缓冲CGI,在CGI程序和CGI接口之间插入一个缓冲程序,缓冲程序与CGI接口间用标准输入输出进行通信。
log 目录下的文件:
log/access.log :访问日志文件。
112.17.245.19 - - [27/Aug/2021:19:04:34 +0800] "GET /ab HTTP/1.1" 404 555 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36"
log/error.log :错误日志文件。
2021/08/27 19:04:34 [error] 25733#0: *29 open() "/usr/local/nginx/html/ab" failed (2: No such file or directory), client: 112.17.245.19, server: localhost, request: "GET /ab HTTP/1.1", host: "116.62.20.151"
log/nginx.pid :进程id。
[root@izbp1i6xv0q1dyvetecayhz sbin]
/usr/local/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.default
│ ├── scgi_params
│ ├── scgi_params.default
│ ├── uwsgi_params
│ ├── uwsgi_params.default
│ └── win-utf
├── fastcgi_temp
├── html
│ ├── 50x.html
│ ├── assets
│ │ ├── css
│ │ │ ├── font-awesome.min.css
│ │ │ ├── index.css
│ │ │ ├── index.css.map
│ │ │ └── typo.css
│ │ ├── fonts
│ │ │ ├── FontAwesome.otf
│ │ │ ├── fontawesome-webfont.eot
│ │ │ ├── fontawesome-webfont.svg
│ │ │ ├── fontawesome-webfont.ttf
│ │ │ ├── fontawesome-webfont.woff
│ │ │ └── fontawesome-webfont.woff2
│ │ ├── images
│ │ │ ├── avatar.jpg
│ │ │ ├── background.png
│ │ │ ├── favicon.ico
│ │ │ ├── ip.png
│ │ │ └── pc.png
│ │ ├── js
│ │ │ └── index.js
│ │ └── sass
│ │ ├── components
│ │ │ ├── _container.scss
│ │ │ ├── _custom.scss
│ │ │ ├── _footer.scss
│ │ │ ├── _global.scss
│ │ │ └── _header.scss
│ │ └── index.scss
│ ├── index.html
│ ├── index.html.bak
│ ├── LICENSE
│ └── README.md
├── logs
│ ├── access.log
│ ├── error.log
│ └── nginx.pid
├── proxy_temp
├── sbin
│ └── nginx
├── scgi_temp
└── uwsgi_temp
? fastcgi.conf:fastcgi相关配置文件 ? fastcgi.conf.default:fastcgi.conf的备份文件 ? fastcgi_params:fastcgi的参数文件 ? fastcgi_params.default:fastcgi的参数备份文件 ? scgi_params:scgi的参数文件 ? scgi_params.default:scgi的参数备份文件 ? uwsgi_params:uwsgi的参数文件 ? uwsgi_params.default:uwsgi的参数备份文件 ? mime.types:记录的是HTTP协议中的Content-Type的值和文件后缀名的对应关系 ? mime.types.default:mime.types的备份文件 ? nginx.conf:这个是Nginx的核心配置文件,这个文件非常重要,也是我们即将要学习的重点 ? nginx.conf.default:nginx.conf的备份文件 ? koi-utf、koi-win、win-utf这三个文件都是与编码转换映射相关的配置文件,用来将一种编码转换成另一种编码 html:存放nginx自带的两个静态的html页面 ? 50x.html:访问失败后的失败页面 ? index.html:成功访问的默认首页 logs:记录入门的文件,当nginx服务器启动后,这里面会有 access.log error.log 和nginx.pid三个文件出现。 sbin:是存放执行程序文件nginx
015-Nginx服务器启停方式介绍
分为两种:
016-Nginx服务的信号控制
查看当前Nginx的进程:
[root@izbp1i6xv0q1dyvetecayhz logs]
root 25732 1 0 18:39 ? 00:00:00 nginx: master process ./nginx
nobody 25733 25732 0 18:39 ? 00:00:00 nginx: worker process
root 26035 25041 0 19:21 pts/0 00:00:00 grep --color=auto nginx
Nginx后台进程中包含一个master进程和多个worker进程,master进程主要用来管理worker进程,包含接收外界的信息,并将接收到的信号发送给各个worker进程,监控worker进程的状态,当worker进程出现异常退出后,会自动重新启动新的worker进程。而worker进程则是专门用来处理用户请求的,各个worker进程之间是平等的并且相互独立,处理请求的机会也是一样的。nginx的进程模型,我们可以通过下图来说明下:
我们现在作为管理员,只需要通过给master进程发送信号就可以来控制Nginx,这个时候我们需要有两个前提条件,一个是要操作的master进程,一个是信号。
(1)要想操作Nginx的master进程,就需要获取到master进程的进程号ID。获取方式简单介绍两个,
方式一:通过ps -ef | grep nginx ;
方式二:在讲解nginx的./configure 的配置参数的时候,有一个参数是--pid-path=PATH 默认是/usr/local/nginx/logs/nginx.pid ,所以可以通过查看该文件来获取nginx的master进程ID.
(2)信号
信号 | 作用 |
---|
TERM/INT | 立即关闭整个服务 | QUIT | "优雅"地关闭整个服务 | HUP | 重读配置文件并使用服务对新配置项生效 | USR1 | 重新打开日志文件,可以用来进行日志切割 | USR2 | 平滑升级到最新版的nginx | WINCH | 所有子进程不在接收处理新连接,相当于给work进程发送QUIT指令 |
- 发送TERM/INT信号给master进程,会将Nginx服务立即关闭。
kill -TERM PID / kill -TERM `cat /usr/local/nginx/logs/nginx.pid`
kill -INT PID / kill -INT `cat /usr/local/nginx/logs/nginx.pid`
- 发送QUIT信号给master进程,master进程会控制所有的work进程不再接收新的请求,等所有请求处理完后,在把进程都关闭掉。
kill -QUIT PID / kill -TERM `cat /usr/local/nginx/logs/nginx.pid`
- 发送HUP信号给master进程,master进程会把控制旧的work进程不再接收新的请求,等处理完请求后将旧的work进程关闭掉,然后根据nginx的配置文件重新启动新的work进程
kill -HUP PID / kill -TERM `cat /usr/local/nginx/logs/nginx.pid`
- 发送USR1信号给master进程,告诉Nginx重新开启日志文件
kill -USR1 PID / kill -TERM `cat /usr/local/nginx/logs/nginx.pid`
017-Nginx服务的信号控制之USR2
[root@izbp1i6xv0q1dyvetecayhz ~]
root 26088 1 0 19:30 ? 00:00:00 nginx: master process ./nginx
nobody 26089 26088 0 19:30 ? 00:00:00 nginx: worker process
root 26443 26397 0 20:26 pts/1 00:00:00 grep --color=auto nginx
[root@izbp1i6xv0q1dyvetecayhz ~]
[root@izbp1i6xv0q1dyvetecayhz ~]
[root@izbp1i6xv0q1dyvetecayhz nginx]
logs/
├── access.log
├── error.log
├── nginx.pid
└── nginx.pid.oldbin
0 directories, 4 files
[root@izbp1i6xv0q1dyvetecayhz nginx]
26088
[root@izbp1i6xv0q1dyvetecayhz nginx]
root 26088 1 0 19:30 ? 00:00:00 nginx: master process ./nginx
nobody 26089 26088 0 19:30 ? 00:00:00 nginx: worker process
root 26446 26088 0 20:26 ? 00:00:00 nginx: master process ./nginx
nobody 26447 26446 0 20:26 ? 00:00:00 nginx: worker process
root 26461 26397 0 20:27 pts/1 00:00:00 grep --color=auto nginx
[root@izbp1i6xv0q1dyvetecayhz nginx]
[root@izbp1i6xv0q1dyvetecayhz nginx]
root 26446 1 0 20:26 ? 00:00:00 nginx: master process ./nginx
nobody 26447 26446 0 20:26 ? 00:00:00 nginx: worker process
root 26465 26397 0 20:28 pts/1 00:00:00 grep --color=auto nginx
发送USR2信号给master进程,告诉master进程要平滑升级,这个时候,会重新开启对应的master进程和work进程,整个系统中将会有两个master进程,并且新的master进程的PID会被记录在/usr/local/nginx/logs/nginx.pid 而之前的旧的master进程PID会被记录在/usr/local/nginx/logs/nginx.pid.oldbin 文件中,接着再次发送QUIT信号给旧的master进程,让其处理完请求后再进行关闭
kill -USR2 PID / kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
kill -QUIT PID / kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`
未完待续
|