Nginx优化与防盗链(内容详细)

8 篇文章 1 订阅

目录

一、Nginx服务优化

1.1 配置Nginx隐藏版本号

1.1.1 Nginx隐藏版本号的方法

修改配置文件法 方法一

 修改配置文件法 方法二

修改源码法 

二、修改Nginx用户与组

2.1 修改的方法(两种)

配置Nginx 网页缓存时间

三、实现Nginx的日志分割

编写脚本进行日志切割

四、 配置Nginx实现连接超时

 五、更改Nginx运行进程数

六、配置Nginx实现网页优化压缩功能

压缩功能参数

 七、配置防盗链


一、Nginx服务优化

1.1 配置Nginx隐藏版本号

隐藏Nginx版本号,避免安全漏洞泄漏

查看Nginx版本号

1.1.1 Nginx隐藏版本号的方法

  • 修改配置文件法
  • 修改源码法

修改配置文件法 方法一

将Nginx配置文件中server_ tokens 选项的值设置为off

[root@www conf]# vi nginx.conf

server_ tokens off;   关闭版本号
......
[root@www conf]# nginx -t

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

 

 

 

 修改配置文件法 方法二

 使用PHP处理动态网页

若PHP配置文件中配置了fastcgi param
SERVER_ _SOFTWARE选项

则编辑php-fpm配置文件,将fastcgi_ param
SERVER_ _SOFTWARE对应的值修改为astcgi _param
SERVER_ SOFTWARE nginx ;

修改源码法 

Nginx源码文件/usr/src/nginx-1.12.0/src/core/nginx.h
包含版本信息,可以随意设置

重新编译安装,隐藏版本信息

示例
#define NGINX_ VERSION "1.1.1",修改版本号为1.1.1
#define NGINX_ VER "IIS/" ,修改软件类型为IIS

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

 

 

 

 

 

 

 

 

二、修改Nginx用户与组

Nginx运行时进程需要有用户与组的支持,以实现对网站文件读取时进行访问控制

Nginx默认使用nobody用户账号与组账号

2.1 修改的方法(两种)

  • 编译安装时指定用户与组
  • 修改配置文件指定用户与组

配置Nginx 网页缓存时间

当Nginx将网页数据返回给客户端后,可设置缓存的时间,以方便在日后进行相同内容的请求时直接返回,避免重复请求,加快了访问速度。

一般针对静态网页设置,对动态网页不设置缓存时间。

设置方法

修改配置文件,在http段、或者server段、或者location段加入对特定内容的过期参数。

示例

修改Nginx的配置文件,在location段加入expires 参数

 Location~\.(gif|jpg|jepg|png|bmp|ico)$ {
     roote html;
    expires 1d;

 

 

 

三、实现Nginx的日志分割

随着Nginx运行时间增加,日志也会增加。为了方便掌握Nginx运行状态,需要时刻关注Nginx

日志文件。

太大的日志文件对监控是一个大灾难

 定期进行日志文件的切割

Nginx自身不具备日志分割处理的功能,但可以通过Nginx信号控制功能的脚本实现日志的自动切割

通过Linux的计划任务周期性地进行日志切割

编写脚本进行日志切割

  • 设置时间变量  
  • 设置保存日志路径
  • 将目前的日志文件进行重命名
  • 重建新日志文件
  • 删除时间过长的日志文件
  • 设置cron任务,定期执行脚本自动进行日志分割

 

#!/bin/bash
#desc: this is used for cut nginx access log every day in 0:0:0 
#获取上一天日期
LAST_DAY=$(date -d "-1 day" "+%Y%m%d")
#指定日志存储目录
LOG_PATH="/var/log/nginx"
#指定nginx服务的进程文件位置
PID_PATH="/usr/local/nginx/logs/nginx.pid"
#用于判断日志存储目录是否存在,如果不存在则创建目录
[ -d $LOG_PATH ] || mkdir -p $LOG_PATH
#用于分割日志,移动日志文件并重命名
mv /usr/local/nginx/logs/access.log ${LOG_PATH}/accesss.log-$LAST_DAY
#重新构建新的日志文件
kill -USR1 $(cat $PID_PATH)
#删除30之前的日志文件
find $LOG_PATH -mtime +30 -exec rm -f {} \;

四、 配置Nginx实现连接超时

HTTP有一个KeepAlive模式,它告诉web服务器在处理完一个请求后保持这个TCP连接的打开状态。若接收到来自同一客户 端的其它请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接。

KeepAlive在一段时间内 保持打开状态,它们会在这段时间内占用资源。占用过多就会影响性能。

vim /usr/ local/nginx/conf/nginx. conf
http {
......
keepalive_ timeout 65 180;
client header timeout 80;
client_ body_ timeout 80;
......
}
systemctl restart nginx

keepalive_ timeout

指定KeepAlive的超时时间(timeout) 。指定每个TCP连接最多可以保持多长时间,服务器将会在这个时间后关闭连接。

Nginx的默认值是65秒,有些浏览器最多只保持60秒,所以可以设定为60秒。若将它设置为0,就禁止了keepalive 连接。

第二个参数(可选的)指定了在响应头Keep-Alive: timeout=t ime中的time值。这个头能够让一 些浏览器主动关闭连接,这样服务器就不必去关闭连接了。没有这个参数,Nginx 不会发送Keep- Alive 响应头。

client_ header_ timeout

客户端向服务端发送-一个完整的request header 的超时时间。如果客户端在指定时间内没有发送一个完整的request header, Nginx返回HTTP 408 (Request Timed Out) 。

client_ body_ timeout

指定客户端与服务端建立连接后发送requestbody的超时时间。如果客户端在指定时间内没有发送任何内容,Nginx返回HTTP 408 (Request Timed Out )。

 

 

 五、更改Nginx运行进程数

在高并发场景,需要启动更多的Nginx进程以保证快速响应,以处理用户的请求,避免造成阻塞

更改进程数的配置方法

修改配置文件,修改进程配置参数

修改配置文件的worker_processes参数

  • 一般设为CPU的个数或者核数
  • 在高并发的情况下可设置为CPU个数或者核数的2倍

增加进程数,可减少系统的开销,提升服务速度

使用ps aux查看运行进程数的变化情况

[root@www conf]# 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;

1代表CPU的位置

 

 

 

 

六、配置Nginx实现网页优化压缩功能

  • Nginx的ngx_http_ gzip_module压缩模块提供对文件内容压缩的功能
  • 允许Nginx服务器将输出内容在发送客户端之前进行压缩,以节约网站带宽,提升用户的访问体验,默认已经安装
  • 可在配置文件中加入相应的压缩功能参数对压缩性能进行优化

压缩功能参数

  • gzip on: 开启gzip压缩输出
  • gzip_min_length 1k: 设置允许压缩的页面最小字节数
  • gzip_buffers 416k: 申请4个单位为1 6k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储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压缩的页面
  • gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss image/jpg image/jpeg image/png image/gif application/x-httpd-php application/javascript application/json;  #压缩类型,表示哪些网页文档启用压缩功能

 

 

 

 

 

 

 

 

 

 七、配置防盗链

vim /usr/ local/nginx/conf/nginx. conf
http {
......
   server {
     ......

    location ~* \. (jpglgiflswf)$ {

      valid_ referers none blocked * . kgc. com kgc . com;

        if ( $invalid referer ) {

        rewrite ^/ http: I /www. kgc. com/error。pngi

           #return 403;
 
         }

      }

  ......

   }
}
~* \. (jpgIgifIswf)$ :这段正则表达式表示匹配不区分大小写,以.jpg或.gif 或.swf结尾的文件:

valid_ referers :设置信任的网站,可以正常使用图片:

none:允许没有http_refer的请求访问资源(根据Referer的定义,它的作用是指示一个请求是从哪里链接过来的,如果直接在浏览器的地址栏中输入一个资源的URL地址,那么这种请求是不会包含Referer 字段的),如http:/ /www. kgc . com/ game.jpg

我们使用http://www. Kgc.com访问显示的图片,可以理解成http://www. kgc . com/game.jpg这个请求是从http://www. Kgc.com这个链接过来的。

blocked: 允许不是http://开头的, 不带协议的请求访问资源;

*. kgc. com: 只允许来自指定域名的请求访问资源,如http://www. Kgc.com

if语句:如果链接的来源域名不在valid_ referers所列出的列表中,$invalid_ referer为true, 则执行后面的操作,即进行重写或返回403 页面。

 

 

 

 

 

 

 

 

 

补充:面试题:用过哪些nginx的模块和做过哪些优化

gzip       ### 网站数据压缩
rewrite       ### 地址重写
stub_ status     ###  统计nginx服务状态
ssl 支持https,      ### 得先用openss1或者TLS工具生成相关证书和私钥文件。再在ssl模块配置中调用证书和私钥
upstream      ### 使用nginx做反向代理web群集,定义群集服务器池
stream       ### 用于定义4层反向代理的
auth_ basic     ### 用户认证
fastcgi        ### 转发请求给php
--with-模块名       ### 开启模块
--without-模块名     ### 禁用模块

隐藏版本号 、压缩、缓存、防盗链、连续保持、优化工作进程和进程连接数、日志分割、反向代理 


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值