一.nginx的概述
1.nginx
Nginx (engine x)是一个高性能的HTTP和反向代理web服务器。用于HTTP协议、HTTPS、SMTP、POP3和IMAP协议。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
2.同步与异步
同步:客户端发起请求,请求从用户。socket被一直占用
异步:服务发起,服务器立即返回信息。socket没有被占用
3.阻塞和非阻塞
阻塞: 线程在执行IO操作获取数据时,这个IO可能需要一定的时间才能等到数据返回,然后才能放接着执行下面的命令。这个线程的等待状态称为阻塞,这样很显然没有充分利用起cpu的资源。
非阻塞: 这个线程在进行IO操作时,无需等待数据的返回,可以接着往下执行代码
4.nginx的优势
IO输入模型:nginx使用的异步非阻塞模型,apache使用的是同步阻塞,存在进程间切换是要消耗资源的。这也就是为何nginx要比apache处理更多的请求更多的并非的原因。
二.nginx的配置
1.下载源码并解压 nginx-1.15.8.tar.gz
tar zxf nginx-1.15.8.tar.gz
2.debug关掉
vim auto/cc/gcc
# debug
#CFLAGS="$CFLAGS -g"
3.解决依赖性
yum install -y pcre-devel zlib-devel gcc
4.语法检测
5.源码编译
./configure --prefix=/usr/local/nginx --with-file-aio
6.make
7.make install
8.版本检测
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -V ##查看版本号
9.开启nginx
/usr/local/nginx/sbin/nginx
10.添加用户nginx
useradd nginx
11.修改配置文件前关掉nginx
/usr/local/nginx/sbin/nginx -s stop
12.修改限制文件,设置最大连接数为65536
vim /etc/security/limits.conf
nginx - nofile 65536
13.修改配置文件nginx.conf
vim /usr/local/nginx/conf/nginx.conf
user nginx nginx;
worker_processes 2;
events {
worker_connections 65535;
}
三.nginx版本更新
1.下载更高版本nginx-1.16.0.tar.gz
2.解压
tar zxf nginx-1.16.0.tar.gz
3.编译的参数要与之前的版本编译时一致
./configure --prefix=/usr/local/nginx --with-file-aio
4.make
5.查看版本nginx-1.16.0
./nginx -V
6.旧版本备份,一旦更新失败回滚。
cd /usr/local/nginx/sbin/
./nginx -V
cp nginx nginx.old
7.复制新的源码
cp -f /root/nginx-1.16.0/objs/nginx /usr/local/nginx/sbin/
8.让旧版本的master停止接受新的连接访问
ps -ef | grep nginx
kill -USR2 9884 ##9884是旧版本master进程号
9.旧版本的worker处理完访问后关闭
kill -WINCH 9884
ps -ef | grep nginx
10.更新完成
/usr/local/nginx/sbin/nginx -V
四.nginx的版本回滚
1.版本会滚
cd /usr/local/nginx/sbin/
cp -f nginx.old nginx
2.唤醒旧版本的master,让他开启旧版本的worker
master进程是读取及评估配置和维持。worker进程是用来处理请求的。
kill -HUP 9884
3.让新版本的master停止接受新的连接访问
kill -USR2 9890 ##9890是新版本master进程号
4.让新版本的worker处理完后关闭
kill -WINCH 9890
5.回滚完成
/usr/local/nginx/sbin/nginx -V
6.杀死更新失败的新版本master进程
kill -9 19559
/usr/local/nginx/sbin/nginx -V
7.浏览器访问172.25.77.1(nginx的测试页)
五.nginx的日志管理
1.查看日志文件
cd /usr/local/nginx/logs
2.日志文件大小
1)查看日志大小
du -sh *
2)客户端访问请求
ab -c 1 -n 100000 http://172.25.77.1/index.html
3)再次查看日志大小
3.reopen重新生成日志文件
1)备份(实际不可能以上方式备份日志文件!)
cd /usr/local/nginx/logs
mv access.log access.log.bak ##备份
2)reopen
/usr/local/nginx/sbin/nginx -s reopen
4.备份日志
日志往往需要切割处理保存,以时间来命名保存比较合理
mv access.log `date +%F -d -1day`_access.log
写一个脚本结合crontab实现每天的零点零分对nginx的前一天的日志文件备份,并重新生成新的日志文件.
vim backup.sh
#!/bin/bash
LOG_PATH=/usr/local/nginx/logs/oldlogs
CUR_LOG_PATH=/usr/local/nginx/logs
YESTERDAY=$(date +%F -d -1day)
mv $CUR_LOG_PATH/access.log $LOG_PATH/${YESTERDAY}_access.log
mv $CUR_LOG_PATH/error.log $LOG_PATH/${YESTERDAY}_error.log
kill -USR1 $(cat $CUR_LOG_PATH/nginx.pid)
六.nginx的压缩
1.为了效果明显,修改nginx访问页面
用/etc/password复制过来作为访问内容.
2.浏览器访问172.25.77.1
F12 查看340k是68k
3.修改配置文件
vim /usr/local/nginx/conf/nginx.conf
gzip on;
gzip_min_length 1;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd/php image/jpeg image/gif image/png;
4.重新加载nginx
/usr/local/nginx/sbin/nginx -s reload
5.浏览器访问172.25.77.1
F12 查看66.12k压缩成1.4k
七.nginx启动方式的修改
/usr/lib/systemd/system ##系统默认systemctl命令存在目录
/etc/systemd/system ##官方建议的用户自己的命令目录
1.安装httpd
yum install -y httpd
2.将httpd服务的作为模板复制,并修改
cp httpd.service /etc/systemd/system/nginx.service
vim /etc/systemd/system/nginx.service
[Unit]
Description=The Nginx HTTP Server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=foring
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/url/local/nginx/sbin/nginx -s stop
[Install]
WantedBy=multi-user.target
3.关闭nginx
systemctl stop nginx
systemctl status nginx
4.打开nginx
systemctl start nginx
systemctl status nginx