文章目录
一:Nginx优化与防盗链实验
前言
最近整理了一下Nginx的优化,详细介绍,更改用户与组、配置网页缓存、日志切割、设置连接超时等;
实验过程
1.1:方法一:配置Nginx隐藏版本号
- 直接修改
[root@localhost ~]# iptables -F
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install gcc gcc-c++ pcre pcre-devel zlib-devel -y
- 解压缩
[root@localhost ~]# cd /opt
[root@localhost opt]# ls
rh
[root@localhost opt]# rz -E
rz waiting to receive.
[root@localhost opt]# tar zxvf nginx-1.12.2.tar.gz
- 创建管理用户
[root@localhost nginx-1.12.2]# useradd -M -s /sbin/nologin nginx
- 编译及安装
[root@localhost nginx-1.12.2]# ./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-http_stub_status_module
#编译
[root@localhost nginx-1.12.2]# make
[root@localhost nginx-1.12.2]# make install
- 路径优化,便于系统管理
[root@localhost nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/
- 使用service控制
[root@localhost nginx-1.12.2]# vim /etc/init.d/nginx
#!/bin/bash
# chkconfig: - 99 20
# description: Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
$PROG
;;
stop)
kill -s QUIT $(cat $PIDF)
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PIDF)
;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac
exit 0
#增加权限
[root@localhost nginx-1.12.2]# chmod +x /etc/init.d/nginx
#重启服务
[root@localhost nginx-1.12.2]# service nginx start
#查看端口
[root@localhost nginx-1.12.2]# netstat -ntap | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 22235/nginx: master
-
客户机访问
-
使用curl -l命令检测
[root@localhost nginx-1.12.2]# curl -I http://20.0.0.42
HTTP/1.1 200 OK
Server: nginx/1.12.2 ##版本号
Date: Mon, 10 Aug 2020 07:15:28 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Mon, 10 Aug 2020 07:07:32 GMT
Connection: keep-alive
ETag: "5f30f234-264"
Accept-Ranges: bytes
- 修改配置文件
[root@localhost nginx-1.12.2]# cd /usr/local/nginx/conf/
[root@localhost conf]# ls
fastcgi.conf koi-utf nginx.conf uwsgi_params
fastcgi.conf.default koi-win nginx.conf.default uwsgi_params.default
fastcgi_params mime.types scgi_params win-utf
fastcgi_params.default mime.types.default scgi_params.default
[root@localhost conf]# vim nginx.conf
- 重启服务
lhost conf]# curl -I http://20.0.0.42
HTTP/1.1 200 OK
Server: nginx ##已经隐藏
Date: Mon, 10 Aug 2020 07:18:56 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Mon, 10 Aug 2020 07:07:32 GMT
Connection: keep-alive
ETag: "5f30f234-264"
Accept-Ranges: bytes
1.2:方法二:修改源码
- Nginx源码文件/usr/src/ nginx-1.12.2/src/ core/nginx. h包含了版本信息,可以随意设置
- 重新编译安装,隐藏版本信息
- define NGINX_VERSION “1.2.2″,修改版本号为1.2.2
[root@localhost ~]# iptables -F
[root@localhost ~]# setenforce 0
[root@localhost ~]# cd /opt
[root@localhost opt]# ls
rh
[root@localhost opt]# rz -E
rz waiting to receive.
[root@localhost opt]# ls
nginx-1.12.2.tar.gz rh
[root@localhost opt]# yum install gcc gcc-c++ pcre pcre-devel zlib-devel -y
[root@localhost opt]# tar zxvf nginx-1.12.2.tar.gz
[root@localhost nginx-1.12.2]# cd src/
[root@localhost src]# ls
core event http mail misc os stream
[root@localhost src]# cd core/
[root@localhost core]# vim nginx.h
[root@localhost core]# vim nginx.h
- 创建用户
[root@localhost core]# useradd -M -s /sbin/nologin nginx
- 编译安装
[root@localhost core]# cd ../../
[root@localhost nginx-1.12.2]# ls
auto CHANGES.ru configure html man src
CHANGES conf contrib LICENSE README
[root@localhost nginx-1.12.2]# ./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-http_stub_status_module
#编译
[root@localhost nginx-1.12.2]# make
[root@localhost nginx-1.12.2]# make install
- 创建软链接进行路径优化
[root@localhost nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/
- 开启服务
[root@localhost nginx-1.12.2]# nginx
[root@localhost nginx-1.12.2]# netstat -ntap | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 21887/nginx: master
[root@localhost nginx-1.12.2]# curl -I http://20.0.0.42
HTTP/1.1 200 OK
Server: nginx/1.2.2 ##已经隐藏修改成功
Date: Mon, 10 Aug 2020 07:28:53 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Mon, 10 Aug 2020 07:26:43 GMT
Connection: keep-alive
ETag: "5f30f6b3-264"
Accept-Ranges: bytes
二:修改Nginx用户与组
- 新建用户账号,如 nginx
- 修改主配置文件user选项,指定用户账号
- 重启 nginx服务,使配置生效
- 使用 ps aux命令查看nginx的进程信息,验证运行用户账号改变效果
[root@localhost nginx-1.12.2]# cd /usr/local/nginx/conf/
[root@localhost conf]# id nobody
uid=99(nobody) gid=99(nobody) 组=99(nobody)
[root@localhost conf]# vim nginx.conf
[root@localhost conf]# service nginx stop
[root@localhost conf]# service nginx start
[root@localhost conf]# ps aux | grep nginx
root 21957 0.0 0.0 20544 608 ? Ss 15:48 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 21958 0.0 0.0 23072 1384 ? S 15:48 0:00 nginx: worker process
root 21960 0.0 0.0 112724 988 pts/1 S+ 15:48 0:00 grep --color=auto nginx
三:配置Nginx网页缓存时间
-
当Nginx将网页数据返回给客户端后,可设置缓存时,以方便在日后进行相同的内容请求时直接放回,避免重复请求,加快了访问速度
-
一般针对静态网页设置,对动态网页不设置缓存时间
设置方法
- 修改Nginx的配置文件,在location段加入expires参数
[root@localhost conf]# vim nginx.conf
- 配置首页信息
[root@localhost conf]# cd ..
[root@localhost nginx]# cd html/
#移动一张图片进来
[root@localhost html]# rz -E
rz waiting to receive.
[root@localhost html]# ls
50x.html index.html
df3499798e4f5110479f1b4d5c2f2026.jpg
#编辑首页
[root@localhost html]# vim index.html
- 重启服务
[root@localhost html]# service nginx stop
[root@localhost html]# service nginx start
- 宿主机访站点
fiddler抓包查看,已经缓存成功
四:实现Nginx的日志切割
-
随着Nginx运行时间增加,日志也会增加。为了方便掌
握Nginx运行状态,需要时刻关注Nginx日志文件 -
太大的日志文件对监控是一一个大灾难
定期进行日志文件的切割 -
Nginx自身不具备日志分割处理的功能,但可以通过
Nginx信号控制功能的脚本实现日志的自动切割
-
通过Linux的计划任务周期性地进行日志切割
4.1:日志分隔思路
-
设置时间变量
-
设置保存日志路径
-
将目前的日志文件进行重命名
-
重建新日志文件
-
删除时间过长的日志文件
-
设置cron任务,定期执行脚本自动进行日志分割
-
date -d:设置时间格式
[root@localhost html]# date
2020年 08月 10日 星期一 17:33:31 CST
[root@localhost html]# date -d "-1 day" "+%Y%m%d"
20200809
[root@localhost html]# date -d "0 day" "+%Y%m%d"
20200810
[root@localhost html]# date -d "1 day" "+%Y%m%d"
20200811
[root@localhost html]# date -d "1 day"
2020年 08月 11日 星期二 17:34:38 CST
- 编写脚进行日志分割的思路
[root@localhost html]# cd /opt
[root@localhost opt]# ls
nginx-1.12.2 nginx-1.12.2.tar.gz rh
[root@localhost opt]# vim shuai.sh
#编写以下内容
#!/bin/bash
#Filename:shuai.sh
#设置日期名称
d=$(date -d "-1 day" "+%Y%m%d") #显示一天前的时间
logs_path="/var/log/nginx"
pid_path="/usr/local/nginx/logs/nginx.pid"
#自动创建日志目录
[ -d $logs_path ] || mkdir -p $logs_path
#分隔日志
mv /usr/local/nginx/logs/access.log ${logs_path}/tase.cpm-access.log-$d
#生成新日志
kill -USR1 $(cat $pid_path)
#删除30天前的日志
find $logs_path -mtime +30 | xargs rm -rf
#增加权限
[root@localhost opt]# chmod +x shuai.sh
- 运行脚本
[root@localhost nginx]# cd /opt/
[root@localhost opt]# ./shuai.sh
[root@localhost opt]# ls /var/log/nginx/
tase.cpm-access.log-20200809 #已经生成日志文件了
- 定时任务
[root@localhost opt]# crontab -e
#每天一点定时任务
0 1 * * * /opt/shuai.sh
crontab: installing new crontab
五:配置Nginx实现连接超时
-
超时参数■为避免同-客户端长时间占用连接,造成资源浪费,可
设置相应的连接超时参数,实现控制连接访问时间
■超时参数Keepalive_timeout 设置连接保持超时时间 Client_header_timeout 指定等待客户端发送请求头的超时时间 Client_body_timeout 设置请求体读超时时间
- 修改配置
[root@localhost opt]# cd /usr/local/nginx/conf/ [root@localhost conf]# ls fastcgi.conf nginx.conf fastcgi.conf.default nginx.conf.default fastcgi_params scgi_params fastcgi_params.default scgi_params.default koi-utf uwsgi_params koi-win uwsgi_params.default mime.types win-utf mime.types.default [root@localhost conf]# vim nginx.conf
第一个是客户端的超时时间,第二个是服务端的超时时间,参数放在http中以上就是进行超时时间的设置
六:nginx运行进程数
-
在高并发场景,需要启动更多的 Nginx进程以保证快速响应,以处理用户的请求,避免造成阻塞
-
可以使用 ps auxi命令查看Ngnx运行进程的个数
-
更改进程数的配置方法
修改配置文件,修改进程配置参数
-
修改配置文件的 worker_ processes参数
一般设为CPU的个数或者核数
在高并发情况下可设置为CPU个数或者核数的2倍
-
运行进程数多一些,响应访问请求时, Nginx就不会临时启动新的进程提供服务,减少了系统的开销,提升了服务速度
-
使用 ps aux查看运行进程数的变化情况
-
默认情况, Nginx的多个进程可能跑在一个cPU上,可以分配不同的进程给不同的CPU处理,充分利用硬件多核多CPU
-
在一台4核物理服务器,可进行以下配置,将进程进行分配
Worker_cpu_affinity 0001 0010 0100 1000 ‘//核心数的序列位置’
#查看cpu核心
[root@localhost conf]# cat /proc/cpuinfo | grep -c "physical"
8
重启服务
[root@localhost conf]# service nginx stop
[root@localhost conf]# service nginx start
[root@localhost conf]# ps aux | grep nginx #一个进程包含一个子进程
root 24803 0.0 0.0 20544 612 ? Ss 18:59 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 24804 0.0 0.0 23072 1388 ? S 18:59 0:00 nginx: worker process
nginx 24805 0.0 0.0 23072 1388 ? S 18:59 0:00 nginx: worker process
nginx 24806 0.0 0.0 23072 1388 ? S 18:59 0:00 nginx: worker process
nginx 24807 0.0 0.0 23072 1388 ? S 18:59 0:00 nginx: worker process
root 24809 0.0 0.0 112724 988 pts/1 S+ 18:59 0:00 grep --color=auto nginx
七:配置Nginx实现网页压缩功能
-
Nginx的ngx_htto_gzip_ module压缩模块提供对文件内容压缩的功能
-
允许Nginx服务器将输出内容在发送客户端之前进行压缩,以节约网站带宽,提升用户的访问体验,默认已经安装
-
可在配置文件中加入相应的压缩功能参数对压缩性能进行优化
-
优化网页压缩设置
[root@localhost conf]# vim /usr/local/nginx/conf/nginx.conf
#搜索gzip on 第一行取消注释
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 6;
gzip_types text/plain application/x-javascript text/css image/jpg image/jpeg image/png image/gif application/xml text/javascript application/x-httpd-php application/javascript application/json;
gzip_disable "MSIE [1-6]\.";
gzip_vary on;
- 重启服务
[root@localhost conf]# service nginx stop
[root@localhost conf]# service nginx start
- 宿主机测试点击刷新
八:防盗链优化
防盗链概述
- 在企业网站服务中,一般都要配置防盗链功能,以避免网站内容被非法盗用,造成经济损失
- Nginx防盗链功能也非常强大。默认情况下,只需要进行简单的配置,即可实现防盗链处理
使用三台主机模拟防盗链
服务端 20.0.0.43
[root@tom03 ~]# iptables -F
[root@tom03 ~]# setenforce 0
[root@tom03 ~]# yum install gcc gcc-c++ pcre pcre-devel zlib-devel -y
#创建用户
[root@tom03 ~]# useradd -M -s /sbin/nologin nginx
[root@tom03 ~]# cd /opt
[root@tom03 opt]# rz -E
rz waiting to receive.
[root@tom03 opt]# ls
awstats-7.6.tar.gz nginx-1.12.2.tar.gz rh
[root@tom03 opt]# tar zxvf nginx-1.12.2.tar.gz
[root@localhost nginx-1.12.2]# ./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-http_stub_status_module
#编译
[root@localhost nginx-1.12.2]# make
[root@localhost nginx-1.12.2]# make install
使用service控制
[root@tom03 nginx-1.12.2]# cd /etc/init.d/
[root@tom03 init.d]# vim nginx
#编写以下内容
#!/bin/bash
# chkconfig: - 99 20
# description: Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
$PROG
;;
stop)
kill -s QUIT $(cat $PIDF)
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PIDF)
;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac
exit 0
#增加权限
[root@tom03 init.d]# chmod +x nginx
[root@tom03 init.d]# netstat -anpt | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 86849/nginx: master
#路径优化,便于系统管理
[root@tom03 init.d]# ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/
#验证
[root@tom03 init.d]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
#重启服务
[root@tom03 init.d]# service nginx start
#查看端口
[root@tom03 init.d]# netstat -ntap | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 86913/nginx: master
编辑首页文件
[root@tom03 nginx]# cd html/
[root@tom03 html]# ls
50x.html index.html
#随便找一张图片进来
[root@tom03 html]# rz -E
rz waiting to receive.
[root@tom03 html]# ls
138171822818.jpg 50x.html index.html
[root@tom03 html]# vim index.html
安装DNS服务
[root@tom03 html]# yum -y install bind
- 配置区域文件
[root@tom03 html]# vim /etc/named.conf
- 配置区域
[root@tom03 html]# vim /etc/named.rfc1912.zones
- 配置区域数据
[root@tom03 ~]# cd /var/named/
[root@tom03 named]# ls
abc.com.zone dynamic named.empty named.loopback
data named.ca named.localhost slaves
[root@tom03 named]# cp -p named.localhost abc.com.zone
[root@tom03 named]# vim abc.com.zone
客户机访问测试
九:下面设置盗链
-
客户机IP 20.0.0.42
-
安装apache
[root@localhost ~]# yum -y install httpd
- 配置监听端口跟域名
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
#开启本地监听断开 ipv6端口注释
Listen 20.0.0.42:80
#Listen 80
#搜索Server
ServerName www.ab.com:80
- 配置站点信息
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# ls
index.html
[root@localhost html]# vim index.html
<h1>this is ab web</h1>
<img src="http://www.abc.com/138171822818.jpg"/>
#域名指向
[root@localhost html]# echo "nameserver 20.0.0.43" > /etc/resolv.conf
#重启服务
[root@localhost html]# systemctl start httpd
-
客户机访问测试
-
防盗链步骤
-
客户端配置
[root@tom03 ~]# cd /usr/local/nginx/conf/
[root@tom03 conf]# vim nginx.conf
#添加以下内容
- 编辑站点目录
[root@tom03 html]# pwd
/usr/local/nginx/html
[root@tom03 nginx]# cd html/
[root@tom03 html]# ls
138171822818.jpg 50x.html index.html
#复制一张图片进来
[root@tom03 html]# rz -E
rz waiting to receive.
[root@tom03 html]# ls
138171822818.jpg 1389753641370.jpg 50x.html index.html
- 配置防盗图片指向
[root@tom03 html]# vim /usr/local/nginx/conf/nginx.conf
- 重启服务
[root@tom03 html]# service nginx stop
[root@tom03 html]# service nginx start
- 宿主机再次访问,访问前把浏览器缓存清空一下
十:对FPM模块进行参数优化
nginx的PHP解析功能实现如果是交由FPM处理的,为了提高PHP的处理速度,可对FPM模块进行参数的调整
FPM模块参数调整,要根据服务器的内存与服务负载进行调整
10.1:启动fpm进程方式
- static:将产生固定数量的fpm进程
- dynamic:将以动态的方式产生fpm进程
- 通过pm参数指定
10.2:FPM优化参数讲解
- static的方式的参数
- pm.max_children:指定启动的进程数量
- Dynamic方式的参数
- pm.max_children:指定启动的进程数量最大的数量
- pm.static_servers:动态方式下初始的fpm进程数量
- pm.min_spare_servers:动态方式下最小的fpm空闲进程数
- pm.max_spare_servers:动态方式下最大的fpm空闲进程数
最小空闲进程数是在不着急的时候最少的进程数
主要看设置的空闲占用率
10.3:FPM优化参数调整示例
- 优化原因:服务器为云服务器,运行了个人论坛,内存为1.5G,fpm进程数为20,内存消耗近1G,处理比较慢
- 优化参数调整
- FPM启动时有5个进程,最小空闲2个进程,最大空闲8个进程,最多可以有20个进程的存在
[root@localhost ~]# vim /usr/local/php/etc/php-fpm.conf
17 pid = run/php-fpm.pid
18 pm = dynamic
19 pm.max_children=20
20 pm.static_servers = 5
21 pm.min_spare_servers = 2
22 pm.max_spare_servers = 8
servers:动态方式下初始的fpm进程数量
- pm.min_spare_servers:动态方式下最小的fpm空闲进程数
- pm.max_spare_servers:动态方式下最大的fpm空闲进程数
最小空闲进程数是在不着急的时候最少的进程数
主要看设置的空闲占用率
10.4:FPM优化参数调整示例
- 优化原因:服务器为云服务器,运行了个人论坛,内存为1.5G,fpm进程数为20,内存消耗近1G,处理比较慢
- 优化参数调整
- FPM启动时有5个进程,最小空闲2个进程,最大空闲8个进程,最多可以有20个进程的存在
[root@localhost ~]# vim /usr/local/php/etc/php-fpm.conf
17 pid = run/php-fpm.pid
18 pm = dynamic
19 pm.max_children=20
20 pm.static_servers = 5
21 pm.min_spare_servers = 2
22 pm.max_spare_servers = 8
处理比较慢
- 优化参数调整
- FPM启动时有5个进程,最小空闲2个进程,最大空闲8个进程,最多可以有20个进程的存在
[root@localhost ~]# vim /usr/local/php/etc/php-fpm.conf
17 pid = run/php-fpm.pid
18 pm = dynamic
19 pm.max_children=20
20 pm.static_servers = 5
21 pm.min_spare_servers = 2
22 pm.max_spare_servers = 8
servers:动态方式下初始的fpm进程数量
- pm.min_spare_servers:动态方式下最小的fpm空闲进程数
- pm.max_spare_servers:动态方式下最大的fpm空闲进程数
最小空闲进程数是在不着急的时候最少的进程数
主要看设置的空闲占用率
10.4:FPM优化参数调整示例
- 优化原因:服务器为云服务器,运行了个人论坛,内存为1.5G,fpm进程数为20,内存消耗近1G,处理比较慢
- 优化参数调整
- FPM启动时有5个进程,最小空闲2个进程,最大空闲8个进程,最多可以有20个进程的存在
[root@localhost ~]# vim /usr/local/php/etc/php-fpm.conf
17 pid = run/php-fpm.pid
18 pm = dynamic
19 pm.max_children=20
20 pm.static_servers = 5
21 pm.min_spare_servers = 2
22 pm.max_spare_servers = 8
本章结束,感谢观看