Nginx优化与防盗链

配置Nginx隐藏版本号

隐藏Nginx版本号,避免安全漏洞泄漏Nginx隐藏版本号的方法
修改配置文件法
修改源码法

修改配置文件方法

a:将Nginx配置文件中server_tokens选项的值设置为off

[root@www conf]# vi nginx.conf
server_tokens off:关闭版本号
[root@www conf]# nginx -t

b:重启服务,访问网站使用curl-l命令检测

[root@www conf]# systemctl restart nginx
[root@www conf]# curl -l http://192.168.0.102/
HTTP/1.1200 oK
Server: nginx

c:使用PHP处理动态网页

  • 若PHP配置文件中配置了fastcgi_param
    SERVER_SOFTWARE选项
  • 则编辑php-fpm配置文件,将fastcgi_param
    SERVER_SOFTWARE对应的值修改为astcgi_param
    SERVER_SOFTWARE nginx ;
修改Nginx用户与组
  • Nginx运行时进程需要有用户与组的支持,以实现对网站文件读取时进行访问控制
  • Nginx默认使用nobody用户账号与组账号
  • 修改的方法
    编译安装时指定用户与组
    修改配置文件指定用户与组
配置Nginx网页缓存时间
  • 当Nginx将网页数据返回给客户端后,可设置缓存的时间,以方便在日后进行相同内容的请求时直接返回,避免重复请求,加快了访问速度
  • 一般针对静态网页设置,对动态网页不设置缓存时间
  • 设置方法
    修改配置文件,在http段、或者server段、或者location段加入对特定内容的过期参数
  • 示例
    修改Nginx的配置文件,在location段加入expires参数
location ~ \.(gifljpgljepglpng/ bmp| ico)$ {
       root html;
       expires 1d;
实现Nginx的日志切割
  • 编写脚本进行日志切割的思路
    设置时间变量
    设置保存日志路径
    将目前的日志文件进行重命名重建新日志文件
    删除时间过长的日志文件
    设置cron任务,定期执行脚本自动进行日志分割(业务正在对外提供服务的,业务关闭的时候进行日期切割/升级、迁移)
编写脚本进行日志切割的思路
[root@www logs]# vim lopt/fenge.sh
#!/bin/bash
# Filename: fenge.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 ] |l mkdir -p $logs_path
mv /usr/local/nginx/logslaccess.log ${logs_path}/test.com-access.log-$d      脚本执行后创建的日志进行命名(时间戳的方式标记唯一性)
kill -USR1 $(cat $pid_path)             reload——>生成新的access.log
find $logs_path -mtime +30 xargs rm -rf

配置Nginx实现连接超时
  • 为避免同一客户端长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间
  • 超时参数
    Keepalive_timeout
    设置连接保持超时时间
    Client_header_timeout
    指定等待客户端发送请求头的超时时间
    Client_body_timeout
    设置请求体读超时时间
更改Nginx运行进程数
  • 在高并发场景,需要启动更多的Nginx进程以保证快速响应,以处理用户的请求,避免造成阻塞
  • 更改进程数的配置方法
    修改配置文件,修改进程配置参数
  • 修改配置文件的worker_processes参数
    一般设为CPU的个数或者核数
    在高并发情况下可设置为CPU个数或者核数的2倍
  • 增加进程数,可减少了系统的开销,提升了服务速度
  • 使用ps aux查看运行进程数的变化情况
[root@www conf#t cat /proc/cpuinfo | grep -c "physical"
4
[root@www conf]# vi nginx.conf
worker_processes 4;
[root@www conf]# systemctl restart nginx
[root@www conf]# ps aux | grep nginx
  • 默认情况,Nginx的多个进程可能跑在一个CPU上,可以分配不同的进程给不同的CPU处理,充分利用硬件多核多CPU
  • 在一台4核物理服务器,进行配置,将进程进行分配
[root@www conf]# vi nginx.conf
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
配置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/plain:压缩类型,对哪些网页文档启用压缩功能
    gzip_vary on:让前端缓存服务器缓存经过gzip压缩的页面
  • 将以上的压缩功能参数加入到主配置文件httpd配置中段
  • 重启服务,查看网页压缩功能开启结果
    在这里插入图片描述
对FPM模块进行参数优化
  • Nginx的PHP解析功能实现如果是交由FPM处理的,为了提高PHP的处理速度,可对FPM模块进行参数的调整
  • 根据服务器的内存与服务负载,调整FPM模块参数
  • 启动fpm进程方式,通过pm参数指定
    static:将产生固定数量的fpm进程.
    dynamic:将以动态的方式产生fpm进程
  • FPM优化参数
    1、Static的方式的参数
    pm.max_children:指定启动的进程数量
    2、Dynamic方式的参数
    pm.max_children:指定启动进程数的最大值
    pm.start_servers:动态方式下初始的fpm进程数
    pm.min_spare_servers:动态方式下最小的fpm空闲进程数
    pm.max_spare_servers:动态方式下最大的fpm空闲进程数
  • FPM优化参数调整示例
    1、优化原因:服务器为云服务器,运行了个人论坛,内存为1.5G,fpm进程数为20,内存消耗近1G,处理比较慢
    2、优化参数调整
    FPM启动时有5个进程,最小空闲2个进程,最大空闲8个进程,最多可以有20个进程存在
vi php-fpm.conf 
pid = run/php-fpm.pid
pm = dynamic
pm.max_children=20     #static模式下空闲进程数上限,大于下面的值
pm.start_servers = 5   #动态方式下默认开启的进程数,在最小和最大之间
pm.min_spare_servers = 2  #动态方式下最少空闲进程数
pm.max_spare_servers = 8  #动态方式下最大空闲进程数
本章总结

Nginx优化方法:
隐藏软件版本号
设置连接超时
更改程序运行用户与组
更改进程数
配置网页缓存时间
配置网页压缩与防盗链
Nginx日志切割
fpm参数优化

Nginx隐藏版本

1、在生产环境中,需要隐藏Nginx的版本号,以避免安全漏洞的泄露
2、查看方法
本地:curl -T http://192.168.128.100 查看的是头部信息
浏览器:可以直接在浏览器(谷歌)——>开发者工具,选择network——>重新加载页面——>选择请求——>选择headlers——>查看版本
3、nginx隐藏版本号的方法

  • 修改配置文件
  • 修改源代码
    a:修改配置文件
[root@wang ~]# vim /usr/local/nginx/conf/nginx.conf

在这里插入图片描述
b:检查语法
在这里插入图片描述
c:重新启动,查看头部信息

[root@wang ~]# systemctl restart nginx
[root@wang ~]# curl -I http://192.168.112.100

在这里插入图片描述
a.1:修改源码

[root@wang ~]# vim /opt/nginx-1.12.0/src/core/nginx.h

在这里插入图片描述
b.1:重新编译

cd /opt/nginx-1.15.9/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make && make install 

c.1:在配置文件中把显示版本号打开
在这里插入图片描述
d.1:重启获取头部信息
在这里插入图片描述

修改用户和组
  • Nginx运行时进程需要有用户与组的支持,以实现对网站文件读取时进行访问控制
  • Nginx默认使用nobody用户账号与组账号
  • 修改的方法
    1、编译安装时指定用户与组修
    2、改配置文件指定用户与组
[root@wang ~]# vim /usr/local/nginx/conf/nginx.conf

在这里插入图片描述

[root@wang~ ]# ps aux | grep nginx 查看用户和组是否修改成功

在这里插入图片描述

配置Nginx网页缓存时间

a:修改配置文件

[root@wang ~]# vim /usr/local/nginx/conf/nginx.conf

在这里插入图片描述
b:上传图片

[root@wang ~]# cd /usr/local/nginx/html

在这里插入图片描述
c:编辑html文件

[root@wang html]# vim index.html

在这里插入图片描述
d:访问
在这里插入图片描述
e: 查看配置缓存时间是否成功
在这里插入图片描述

Nginx日志分割

随着Nginx运行时间增加,日志也会增加。为了方便掌握Nginx运行状态,需要时刻关注Nginx日志文件,太大的日志文件对监控是很难管理。
所以要定期进行日志文件的切割(以固定点,时间戳的方式定义日志)。
Nginx自身不具备日志分割处理的功能,但可以通过Nginx信号控制功能的脚本实现日志的自动切割,通过Linux的计划任务周期性地进行日 志切割。
a:编写脚本进行日志分隔的思路
设置时间变量
设置保存日志路径
将目前的日志文件进行重命名重建新日志文件
删除时间过长的日志文件
设置cron任务,定期执行脚本自动进行日志分割
b:创建日志分隔脚本

[root@wang html]# vim rizhi.sh
#!/bin/bash
#Filename:fenge.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}/test.com-access.log-$d      移动日志并重新命名(以时间戳的方式标记唯一性)
kill -HUP $(cat $pid_path)                       重载生成新的access日志
find $logs_path -mtime +30 | xargs rm -rf

在这里插入图片描述
c: 为脚本增加可执行权限

[root@wang html]# chmod +x rizhi.sh

在这里插入图片描述

配置Nginx实现连接超时

编辑主配置文件
在这里插入图片描述

更改Nginx运行进程数

在高并发场景,需要启动更多的Nginx进程以保证快速响应,以处理用户的请求,避免造成阻塞
a:更改进程数的配置方法
1、修改配置文件,
2、修改进程配置参数

b:修改配置文件的worker_processes参数

  • 一般设为CPU的个数或者核数
  • 在高并发情况下可设置为CPU个数或者核数的2倍
  • 增加进程数,可减少了系统的开销,提升了服务速度
  • 使用ps aux查看运行进程数的变化情况
    默认情况,Nginx的多个进程可能跑在一个CPU上,可以分配不同的进程给不同的CPU处理,充分利用硬件多核多CPU
    c:查看cpu核数和进程参数
[root@wang html]# cat /proc/cpuinfo | grep -c "physical"
[root@wang html]# ps aux | grep nginx

在这里插入图片描述
d: cpu和进程参数对比

  • 2 核cpu,开启2个进程
    worker_processes 2; //修改为核数相同或者2倍
    worker_cpu_affinity 01 10;1000
    //设置每个进程由不同cpu处理,进程数配为2时为0001、0010、0100、
    PS:
    01表示启用第一个CPU内核,10表示启用第二个CPU内核
    worker_cpu_affinity 01 10;表示开启两个进程,第一个进程对应着第一个CPU内核,第二个进程对应着第二个CPU内核。

  • 2核cpu,开启4个进程

worker_processes 4;
worker_cpu_affinity 01 10 01 10;
PS:开启了四个进程,它们分别对应着开启2个CPU内核

  • 4个cpu,开启4个进程
    worker_processes 4;
    worker_cpu_affinity 0001 0010 0100 1000;

ps:0001表示启用第一个CPU内核,0010表示启用第二个CPU内核,依此类推

配置Nginx实现网页压缩功能

a:编辑主配置文件

 gzip on;                  #开启gzip压缩功能
   gzip_min_length 1k;       #压缩阈值
   gzip_buffers 4 16k;       #buffer 大小为4个16k缓冲区大小
   gzip_http_version 1.1;    #压缩版本(默认不设置)
   gzip_comp_level 6;        #压缩比率,最小为1,处理速度快,传输速度慢,9最大压缩比,处理速度慢,传输速度快(建议5-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条件,支持正则,表示ie6以下不启用gzip
   gzip_vary on;  #支持前端缓存服务器存储压缩页面

b:插入图片
c:重启服务,测试
在这里插入图片描述
在这里插入图片描述

防盗链
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值