Nginx优化与防盗链

7 篇文章 0 订阅
  • 网页压缩
  • 网页缓存
  • 隐藏版本号
  • 更改工作进程数,进程绑定CPU,进程最大连接数
  • 设置连接保存
  • 设置防盗链

系统内核优化:

ulimit -n 临时设置

vim /etc/security/limits.conf 永久修改

soft/hard -nofile 打开文件数 65536

soft/hard -nproc 打开进程数 32000

soft/hard -memlock 内存数量 unlimited

echo "net.ipv4.tcp_tw_reuse=1" >> /etc/sysctl.conf #开启重用。允许将TIME-WAITsockets重用于新的tcp连接,默认为0,表示关闭;

echo "net.ipv4.tcp_tw_recycle=1" >> /etc/sysctl.conf #开启tcp连接中TIME-WAITsockets的快速回收,默认为0,表示关闭;

echo "net.ipv4.tcp_timestamps=0" >> /etc/sysctl.conf #时间戳可避免序列号的卷绕,一个1Gbps的链路肯定会遇到以前的序列号。时间戳能让内核接受这种“异常”的数据包,这里需将其关闭

echo "net.ipv4.tcp_syncookies=1" >> /etc/sysctl.conf #开启SYNCookies,当SYN队列溢出时,启用cookies处理,可防范少量SYN攻击,默认为0,表示关闭。

php 9000端口 mysql 3306端口

php --ini默认存放路径查询

php多一个fpm模块,通过这个模块接收nginx发来的请求

Nginx隐藏版本号的方法:

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

查看:F12 server字段、curl -I IP

修改配置文件法:vim nginx.conf 在http块中添加:server_tokens off; #关闭版本号

修改源码法:修改src/core/nginx.h

修改#define NGINE_VERSION "版本号"

#define NGINX_VER "apache/" NGINX_VERSION 修改服务

然后重新编译

打开版本号 vim nginx.conf 在http块中添加:server_tokens on;

修改Nginx用户与组

  • Nginx运行时进程需要有用户与组的支持,以实现对网站文件读取时进行访问控制
  • Nginx默认使用nobody用户账号与组账号
  • 修改的方法
  • 编译安装是指定用户与组 --user= --group=
  • 修改配置文件指定用户与组 vim nginx.conf

user nginx nginx;

配置Nginx网页缓存时间

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

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

设置方法:

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

对所有网有需要就在http段中设置;对其中几个站点需要,就在server设置;如果只想在某个网站的某个页面或者请求设置,在location。

location~\.(gif|jpg|jepg|png|bmp|ico)${

root html;

expires 1d; #缓存一天

 expires 1d cache-control 86400s

实现Nginx的日志切割

  • 随着Nginx运行时间增加,日志也会增加。为了方便掌握Nginx运行状态,需要时刻关注Nginx日志文件。
  • 太大的日志文件对监控是一个大灾难:定期进行日志文件的切割
  • Nginx自身不具备日志分割处理的功能,但可以通过Nginx信号控制功能的脚本实现日志的自动分割
  • 通过Linux的计划任务周期性地进行日志切割

#!/bin/bash

#Filename:fenge.sh

d=$(date -d "-1 day" "+%Y%m%d") #-d获取日期的参数(条件)

logs_path="/var/log/nginx" #存储日志目录

pid_path="/usr/local/nginx/logs/nginx.pid" #获取PID日志文件

[ -d $log_path ] || mkdir -p $logs_path #if [ ! -d $log_path];then;mkdir -p $logs_path;fi

mv /usr/local/nginx/logs/access.log ${logs_path}/test.com-access.log-$d #分隔日志

kill -USER1 $(cat $pid_path) #重新生成日志文件

find $logs_path -mtime +30 | xargs rm -rf

#删除超过三十天以前的旧日志

(先获取日期的参数,以年月日的格式,定义存储日志的目录和获取PID的日志文件。然后进行判断,日志是否为空,如果为空,则在存储日志目录新建日志。然后再进行日志分隔,将原路径的access.log文件改为指定名字和时间并保存到/var/log/nginx中。然后使用kill -USER1重新生成日志文件。最后删除超过三十天以前的旧文件)

当月第一天:date +%Y%m01

下个月的一号:date -d "1 month" +%Y%m01

上个月的最后一天:date -d "$(date +%Y%m01) -1 day" +%Y%m%d

当月倒数第三天:date -d "$(date -d "1 month" +%Y%m01) -3 day" +%Y%m%d

配置Nginx实现连接超时

  1. 为避免同一客户端长时间占用链接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间
  2. 超时参数
  • Keepalive_timeout

设置连接保持超时时间

  • Client_header_timeout

指定等待客户端发送请求头的超时时间

  • Client_body_timeout

设置请求体读超时时间

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

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

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

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

Client_header_timeout

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

更改Nginx运行进程数

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

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

(Nginx两个进程:工作进程worker process 处理用户连接请求的工作进程(可修改生成多个子进程)

主进程:master process启动读取进程文件,管理工作进程)

修改配置文件的worker_processe参数

  • 一般设为CPU的个数或者核数;
  • 也可以设置为auto;
  • 在高并发的情况下,可以设置为CPU的个数或者核数的两倍。

默认情况下,Nginx的多个进程可能跑在一个CPU上,可以分配不同的进程给不同的CPU处理,充分利用硬件多核多CPU

例:在一台4核物理服务器,进行配置,将进程进行分配:(cpu绑定)

配置Nginx实现网页压缩功能

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

gzip on #取消注释,开启gzip压缩功能

gzip_min_length 1k; #最小压缩文件大小

gzip_buffers 4 64k; #压缩缓冲区,大小为四个64k缓冲区

gzip_http_version 1.1; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)

gzip_comp_level 6; #压缩比率(6最平衡,9压缩比高)

gzip_vary on; #支持前段缓存服务器存储压缩页面 (格式在/usr/local/nginx/conf/mime.types中)

配置Nginx实现防盗链

在企业网站服务中,一般都要配置防盗链功能,以免网站内容被非法盗用,造成经济损失。

Nginx防盗链功能非常强大,默认情况下只需要进行简单的配置,即可实现防盗链处理。

location~* \.(jpg|gif|swf)$ {

valid_referers *.xny.com xny.com none blocked;

if ($invalid_referer) {

rewrite /* http://www.xny.com/error.png;

}

}

配置说明:

  • ~* \.(jpg|gif|swf)$:匹配以.jpg或.gif或.swf结尾的不区分大小写的文件
  • valid_referers:设置信任的网站,即能引用相应图片的网站
  • 网址或者域名:referer中包含相关字符串的网址
  • if语句:如果连接的来源域名不在valid_referers所列出的列表中,$invalid_referer为1,则执行后面的操作,则进行重写或返回403页面。

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

blocked:表示Referer值被防火墙进行伪装。允许不是http://开头的,不带协议的请求访问资源.

 

 

 

nginx模块

http_gzip_static_module 网页压缩模块

http_stub_status_module 状态统计模块

http_rewrite_module 重写模块

http_auth_basic_module 网站用户认证模块

http_fastcgi_module 转发请求给php-fpm模块

http_ssl_module https SSL认证加密模块

http_upstream_*_module 反向代理模块

http_stream 四层反向代理

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

R1chArd_TvT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值