一、nginx的简介

1.nginx的特点:

(1)轻量级,采用 C 进行编写,同样的 web 服务,会占用更少的内存及资源

(2)抗并发,nginx 以 epoll and kqueue 作为开发模型,处理请求是异步非阻塞的,负载能力比 apache 高很多,而 apache 则是阻塞

型的。在高并发下 nginx 能保持低资源低消耗高性能 ,而 apache 在 PHP 处理慢或者前端压力很大的情况下,很容易出现进程数飙升,从

而拒绝服务的现象。

(3)nginx 处理静态文件好,静态处理性能比 apache 高三倍以上

(4)nginx 的设计高度模块化,编写模块相对简单

(5)nginx 配置简洁,正则配置让很多事情变得简单,而且改完配置能使用 -t 测试配置有没有问题,apache 配置复杂 ,重启的时候发现配置出错了,会很崩溃

(6)nginx 作为负载均衡服务器,支持 7 层负载均衡

(7)nginx 本身就是一个反向代理服务器,而且可以作为非常优秀的邮件代理服务器

(8)启动特别容易, 并且几乎可以做到 7*24 不间断运行,即使运行数个月也不需要重新启动,还能够不间断服务的情况下进行软件版本的升级

(9)社区活跃,各种高性能模块出品迅速

二、nginx的安装

1.nginx的安装包可以在官网nginx.org上直接下载
本机使用的是最新版nginx-1.17.1.tar.gz,安装在rhel7.5的版本,主机名server1,ip为172.25.21.1

tar zxf nginx-1.17.1.tar.gz					##解压nginx安装包
cd nginx-1.17.1								##进入解压后的目录,可以看到源码编译安装脚本configure
./configure --help							##可以查看能给nginx添加的模块
2.版本号的取消、debug日志的关闭和让配置文件可以有语法检查的设定(都要在编译之前)
关闭版本号的作用:如果别人可以查看到服务器的版本号信息,那么别人会更容易的找到攻克服务器的方法,关闭以后更安全
取消方法:
vim ./src/core/nginx.h		##取消版本号信息,需要在编译之前进行

#注意:因为在接下来的实验中会有版本的升级和回退操作,所以此处我保留版本号

nginx 内存分析工具 nginx内存要求_nginx

debug日志关闭的作用:可以让安装的nginx变的很小,因为debug日志会把每一条请求和信息都保存下来,这样会浪费很大的空间
关闭方法:
vim ./auto/cc/gcc		##编译之前操作

nginx 内存分析工具 nginx内存要求_nginx_02

语法检查的作用:除了自己写入的参数外,nginx自带的参数都会有颜色的提示
配置方法:
mkdir /root/.vim						##首先在/root/家目录下建立这个目录
cp -r ./contrib/vim/* /root/.vim		##将关于nginx的vim语法信息全部移动到建立的目录下

nginx 内存分析工具 nginx内存要求_nginx_03


nginx 内存分析工具 nginx内存要求_nginx 内存分析工具_04

3.开始编译安装
cd nginx-1.17.1						##进入解压后的目录
yum install gcc openssl-devel -y	##安装编译需要的环境,也可以先在不装,执行安装脚本失败后根据报错缺少的环境来装
./configure --help					##查看能给nginx添加的模块
./configure --prefix=/usr/local/nginx --with-file-aio		##编译源码到指定目录,本处添加的模块为文件的输入输出模块
														##该模块的作用是启用file aio支持(一种APL文件传输格式)
make && make install				##在执行完安装脚本后,不要退出当前目录执行此安装源码命令
cd /usr/local/nginx					##进入安装后的软件目录
ls									##查看有什么目录
./sbin/nginx						##以命令方式启动服务
./sbin/nginx -v						##查看nginx的版本信息
./sbin/nginx -V						##查看nginx的版本信息和编译的gcc以及安装目录和添加模块的信息
./sbin/nginx -t						##查看nginx的配置文件书写是否有错误,服务起不来时也可以看这个报错来修改
./sbin

nginx 内存分析工具 nginx内存要求_vim_05

4.测试(在真机上测试):

nginx 内存分析工具 nginx内存要求_vim_06

三、nginx在不关闭服务的前提下版本的更新和回退

1.首先再获取一个不同版本的nginx安装包
本机使用的是从官网下载的nginx-1.16.0.tar.gz

版本的更新:
tar zxf nginx-1.16.0.tar.gz					##解压新的nginx安装包
cd nginx-1.16.0/							##进入安装目录
./configure --prefix=/usr/local/nginx --with-file-aio		
			##注意:此处执行时填写的安装位置和添加的模块必须要和上一个版本相同,如果忘记了可以 -V查看模块和位置信息
make					##一般只有第一次安装软件时才会执行make install,
					##因为那样会覆盖原来的软件数据和配置,这里只执行make生成二进制命令文件即可
[root@server1 nginx-1.16.0]# cp -f ./objs/nginx /usr/local/nginx/sbin/nginx		##把二进制命令文件强制覆盖原来的
ps aux | grep nginx					##在现在还没有修改配置文件的情况下,可以看到两个nginx进程
							##一个是root用户管理的nginx,另一个是处理请求的用户,还没有修改则为nobody

kill -USR2 3974				##让新的1.16nginx启动服务
ps aux | grep nginx			##可以看到两个MASTE,两个nginx工作进程
/usr/local/nginx/sbin/nginx -v			##通过查看此时的版本号已经改变了,但是原来的工作进程还会处理信息,所以把原来
									##nginx的工作进程关掉,让它不要和新的进程争抢资源
kill -WINCH 3974			##关闭原来MASTER的工作进程
kill -9 3974				##如果运行一段时间后确认更新没问题,把旧版本的进程结束掉即可

nginx 内存分析工具 nginx内存要求_配置文件_07


nginx 内存分析工具 nginx内存要求_nginx_08


nginx 内存分析工具 nginx内存要求_配置文件_09

版本的回退:
#如果发现更新之后服务出现问题,那么此时就需要此操作

[root@server1 nginx-1.17.1]# cp -f ./objs/nginx /usr/local/nginx/sbin/nginx		##在旧版本目录下复制二进制命令文件
kill -HUP 3974					##启动旧版本MASTER的工作进程
ps aux | grep nginx				##查看工作进程是否建立
kill -9 6575					##一次更新失败后短时间内不会让你再次更新,所以直接kill即可
kill -9 6576
ps aux | grep nginx	
/usr/local/nginx/sbin/nginx -v	##查看版本号信息回到旧版本

关于kill信号的用法可以在真机上通过man 7 signal来查看

nginx 内存分析工具 nginx内存要求_配置文件_10


nginx 内存分析工具 nginx内存要求_nginx 内存分析工具_11

四、日志的切割和systemd启动方式的文件编写

1.日志的切割和备份
在我们关闭debug日志编译安装后,现在nginx有两个日志,分别是access.log和error.log
cd /usr/local/nginx					##进入软件的安装目录查看
ls ./logs/							##查看日志文件
##access.log						保存着客户端连接访问nginx服务器的详细信息
##error.log							保存着软件运行出现问题时的错误信息
##pid.log							里面保存着当前运行的nginx服务的pid

mv access.log `date +%F -d -1days`_access.log			##我们就以日期的名字来命名备份的日志
												##一般当天备份的为前一天的日志,所以用前一天的日期来命名
/usr/local/nginx/sbin/nginx -s reopen					##自动在logs下生成新的日志

nginx 内存分析工具 nginx内存要求_nginx_12


nginx 内存分析工具 nginx内存要求_nginx 内存分析工具_13

2.自动备份并生成新日志的自动化脚本编写
脚本的编写:
vim backup.sh
#!/bin/bash
LOGS_PATH=/usr/local/nginx/logs/oldlogs
CUR_LOGS_PATH=/usr/local/nginx/logs
YESTERDAY=$(date +%F -d -1day)

mv $CUR_LOGS_PATH/access.log $LOGS_PATH/${YESTERDAY}_access.log
mv $CUR_LOGS_PATH/error.log $LOGS_PATH/${YESTERDAY}_error.log

/usr/local/nginx/sbin/nginx -s reopen

nginx 内存分析工具 nginx内存要求_配置文件_14

自动执行的定时任务编写:
crontab -e -u root			##编写一个定时任务定时执行脚本,一般为每天的凌晨12点备份前一天的数据
0 0 * * * /bin/bash  /usr/local/nginx/logs/backup.sh
3.systemd方式启动第三方软件nginx的脚本编写
systemctl status httpd						##查看httpd的启动脚本
cp /usr/lib/systemd/system/httpd.service /etc/systemd/system/nginx.service
##先复制一个模板到官方推荐的第三方软件systemd搭建目录下
vim /etc/systemd/system/nginx.service		##配置启动脚本
/usr/local/nginx/sbin/nginx -s stop			##把原来的nginx服务关闭,因为这是以命令方式启动的,systemd方式无法关闭
systemctl start nginx.service				##启动服务

nginx 内存分析工具 nginx内存要求_nginx 内存分析工具_15


nginx 内存分析工具 nginx内存要求_配置文件_16


nginx 内存分析工具 nginx内存要求_配置文件_17

五、网页默认发布文件的压缩(gzip方法)

vim /usr/local/nginx/conf/nginx.conf			##修改配置文件
systemctl reload nginx.service					##使修改配置生效,一般不会重启服务
/usr/local/nginx/sbin/nginx -t					##查看语法是否有问题

##注意:在本机的火狐浏览器中,按f12或crtl+shift+c可以进入网页的详细信息查看界面,再点击Network查看网页文件信息

nginx 内存分析工具 nginx内存要求_nginx_18


nginx 内存分析工具 nginx内存要求_nginx_19


nginx 内存分析工具 nginx内存要求_配置文件_20


nginx 内存分析工具 nginx内存要求_nginx_21

六、nginx服务器的一些连接限制

1.配置文件的简单修改(先给nginx的工作进程创建一个用户身份)
vim /usr/local/nginx/conf/nginx.conf		##修改配置文件
systemctl reload nginx

nginx 内存分析工具 nginx内存要求_nginx 内存分析工具_22


nginx 内存分析工具 nginx内存要求_vim_23


nginx 内存分析工具 nginx内存要求_配置文件_24


nginx 内存分析工具 nginx内存要求_nginx 内存分析工具_25

2.对同一个ip的连接数限制
vim /usr/local/nginx/conf/nginx.conf		##修改配置文件
systemctl reload nginx

参数的简单介绍(官网上可以查到):
zone1为限制域的名称,$binary_remote_addr为客户端ip的二进制形式,这种方式比较节约空间,10m是此限制域的总大小。
接着在location中配置limit_conn,限制单个用户最多连接数
把用户连接限制在zone1,最多连接数为10,这是限流操作
测试:
man ab				##可以查看到这是一个apache工具,有详细的信息
ab -c 1 -n 10000 http://172.25.21.1/index.html		##对nginx的默认发布文件进行10000次请求,查看请求速率

nginx 内存分析工具 nginx内存要求_nginx_26


nginx 内存分析工具 nginx内存要求_vim_27

3.访问速率的限制
vim /usr/local/nginx/conf/nginx.conf		##修改配置文件
systemctl reload nginx

参数的简单介绍:
limit_rate表示下载的最大速度
测试:
ab -c 1 -n 10 http://172.25.21.1/download/vim.jpg		##只请求10次图片来查看速率

nginx 内存分析工具 nginx内存要求_vim_28


nginx 内存分析工具 nginx内存要求_vim_29


nginx 内存分析工具 nginx内存要求_vim_30