Nginx服务优化
隐藏Nginx版本号,避免安全漏洞泄漏
Nginx隐藏版本号的方法
修改配置文件法
将Nginx配置文件中的server_tokens选项的值设置为off,然后重启服务,访问网站使用curl -I 命令检测
vi /etc/nginx.conf
修改源码法
vi nginx-1.12.2/src/core/nginx.h
#define nginx_version 1001010 #发行时间的修改
#define NGINX_VERSION “0.0.0” #发行版本号的修改
#define NGINX_VER “IIS/” NGINX_VERSION #搭建服务所使用的软件修改
再将server_tokens 的选项改成on后关闭nginx重新编译安装,开启服务后查看
systemctl stop nginx
cd nginx-1.12.2/
make && make install
systemctl start nginx
curl -I http://localhost
修改Nginx用户与组
Nginx运行时进程需要用户与组的支持,以实现对网站文件读取时进行访问控制
Nginx默认使用nobody用户账号与组账号
修改的方法
编译安装指定用户与组(具备用户和组的功能性)
创建用户账号与组账号nginx
编译安装时–user与–group指定Nginx服务的运行用户与组账号
修改配置文件指定用户与组(实际以该用户与组身份去运行)
新建用户账号nginx1
修改主配置文件user选项,指定用户账号与组账号
vi /etc/nginx.conf
配置Nginx网页缓存时间
当Nginx将网页时间返回给客户端后,可设置缓存的时间,以方便在日后进行相同内容的请求时直接返回,避免重复请求,加快了访问速度.一般对静态网页设置,对动态网页不设置缓存时间
对图片进行缓存
添加图片到/usr/local/nginx/html/中
进行图片链接创建
cd /usr/local/nginx/html/
vi index.html
vi /etc/nginx.conf
再次登录与之前登录对比
日志切割
随着Nginx运行时间增加,日志也会增加。为了方便掌握Nginx运行状态,需要时刻关注Nginx日志文件。太大的日志文件对监控是一个负担,所以要定期对日志进行切割,Nginx自身不具备日志分割处理的功能,但可以通过Nginx信号控制功能的脚本实现日志的自动切割,通过Linux的计划任务周期性的进行日志切割
编写脚本进行日志切割的思路设置时间变量
设置保存日志路径
将目前的日志文件进行重命名
重建新日志文件
删除时间过长的日志文件
设置cron任务,定期执行脚本自动进行日志分割
时间相关
date “+%Y%m%d” 查看当前日期时间
date “+%Y-%m-%d” 另一种格式查看当前的年月日
date -d “-1 day” “+%Y-%m-%d” 查看昨天日期
date -d “+1 day” “+%Y-%m-%d” 查看明天日期
时间参数
在linux操作系统中,每个文件都有三个比较重要的时间参数:ctime, atime, mtime
modification time (mtime) :当修改文件的内容数据的时候,就会更新这个时间,而更改权限或者属性,mtime不会改变,这就是和ctime的区别。
change time (ctime):当修改文件的权限或者属性的时候,就会更新这个时间,ctime并不是createtime,更像是change time。 只有当更新文件的属性或者权限的时候才会更新这个时间,但是更改内容的话是不会更新这个时间。
accesstime (atime):当使用这个文件的时候就会更新这个时间。
查看文件近期状态
-exec和 xargs参数解析
find. -inum xxx -exec rm -i {};
这条命令的意思是find找到的内容作为后面rm删除的对象
-exec参数后面跟的是命令,它的终止是以;为结束标志的,{}代表前面find找出来的文件名,\代表换行符,是立即执行的意思。
find. -inum xxx | xargs rm -f ,xargs这个参数就是强力的意思,如果前面的输出结果包含空格或制表符也会被强力执行
kill -QUIT 结束进程
-HUP 平滑重启类似reload
-USR1 日志分隔
-USR2 平滑升级
编写脚本
vi rzfg.sh(日志文件的生成路径为logs/aa.com.access.log)
登录网页后运行脚本
./rzfg.sh
定时运行
crontab -e #编写任务计划
Nginx深入优化
配置Nginx实现连接超时
为避免同一客户端长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间
参数
Keepalive_time:设置连接保持超时时间
Client_header_timeout:指定等待客户端发送请求头的超时时间Client_body_timeout:设置请求体读超时时间
请求头header
request如果是post才有请求体,get则没有请求体,直接跟在?后面,用&隔开,请求头header一般用来存放一些cookie, token信息;
Cookie是一个保存在客户机中的简单的文本文件,这个文件与特定的Web. 文档关联在一起,保存了该客户机访问这个Web文档时的信息,当客户机再次访问这个Web文档时这些信息可供该文档使用。由于“Cookie”具有可以保存在客户机上的神奇特性,因此它可以帮助我们实现记录用户个人信息的功能,而这一切都不必使用复杂的CGI等程序。
举例来说,一个Web站点可能会为每一个访问者产生一个唯一的ID,然后以Cookie文件的形式保存在每个用户的机器上。如果使用浏览器访问Web,会看到所有保存在硬盘上的Cookie。在这个文件夹里每一个文件都是一个由“名/值”对组成的文本文件,另外还有一个文件保存有所有对应的Web站点的信息。在这里的每个Cookie 文件都是一个简单而又普通的文本文件。透过文件名,就可以看到是哪个Web站点在机器上放置了Cookie(当然站点信息在文件里也有保存)。
Token的引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。
Token的定义: Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。
使用Token的目的:Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。
配置
vi /etc/nginx.conf
重启后登录网页,抓包
更改Nginx运行进程数
在高并发场景,需要启动更多的Nginx进程以保证快速响应,以处理用户的请求,避免造成阻塞查看CPU或者核数
cat /proc/cpuinfo | grep -c “physical”
更改进程数的配置方法:修改配置文件,修改进程配置参数
修改配置文件的worker_processes参数:一般设为CPU的个数或者核数,在高并发情况下可设置为CPU个数或者核数的2倍
vi /etc/nginx.conf
增加进程数,可减少了系统的开销,提升了服务速度
使用ps aux查看运行进程数的变化情况
ps aux | grep nginx
默认情况下,Nginx的多个进程可能跑在一个CPU上,可以分配不同的进程给不同的CPU处理,充分利用硬件多核多CPU
配置Nginx实现网页压缩功能
Nginx的ngx_http_gzip_module压缩模块提供对文件内容压缩的功能。允许Nginx服务器将输出内容在发送客户端之前进行压缩,以节省网站带宽,提升用户的访问体验,默认已经安装。可在配置文件中加入相应的压缩功能参数对压缩性能进行优化。
压缩功能参数
gzip on:开启gzip压缩输出
gzip_min_length 1k:设置允许压缩的页面最小字节数
gzip_buffers 4 16k:申请4个单位为16k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果
gzip_http_version 1.0:设置识别http协议版本,默认是1.1,目前大部分浏览器已经支持gzip压缩但处理较慢,也比较消耗服务器CPU资源
gzip_comp_level 2:指定gzip压缩比,1压缩比最小,处理速度最快;9压缩比最大,传输速度快,但处理速度最慢。
gzip_types text/pain:压缩类型,对哪些网页文档启用压缩功能
gzip_vary on:让前端缓存服务器缓存经过gzip压缩的页面。
vi /etc/nginx.conf
重启后登录网页进行抓包
配置Nginx实现防盗链
到/usr/local/nginx/html/下,配置新的网页,并将图片放置再此
布置图片盗用
再另一台主机上配置网页
配置防盗链
重启后登录另一台主机网页
对FPM模块进行参数优化
Nginx的PHP解析功能实现如果是交由FPM处理的,为了提高PHP的处理速度, 可对FPM模块进行参数的调整
根据服务器的内存与服务负载,调整FPM模块参数
启动fpm进程方式,通过pm参数指定
static:将产生固定数量的fpm进程 (静态)
pm.max_children: 指定启动的进程数量
dynamic:将以动态的方式产生fpm进程 (动态)
pm.max_children:指定启动进程数的最大值
pm.start_servers: 动态方式下初始的fpm进程数
pm.min_spare_servers: 动态方式下最小的fpm空闲进程数
pm.max_spare_servers: 动态方式下最大的fpm空闲进程数
cd /usr/local/php/etc/php-fpm.d/
vi www.conf
0pm = dynamic
pm.max_children = 20 static模式下空闲进程数上限,大于下面的值
pm.start_servers = 5 动态方式下默认开启的进程数,在最小和最大之间
pm.min_spare_servers = 2 动态方式下最少空闲进程数
pm.max_spare_servers = 8 动态方式下最大空闲进程数
ps aux | grep php-fpm查看进程状态
pkill php-fpm终止进程
/usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini 重新加载
ps aux | grep php-fpm