nginx优化与防盗链

发布时间:2023年12月19日

nginx服务优化

系统内核级别的优化:

/ete/security/limits.conf内核限制文件

* ? ? soft ?  noproc ? ? ? ?  65535 ? ? ?  打开的进程数
* ? ? hard ?  noproc ? ? ? ?  65535
* ? ? soft ?  nofile ? ? ? ?  65535 ? ? ?  打开的文件数
* ? ? hard ?  nofile ? ? ? ?  65535 ? ? ? ? 
* ? ? soft ?  memlock ? ? ? ? unlimited ?  不做内存锁定
* ? ? hard ?  memlock ? ? ? ? unlimited

你常用的Nginx模块,用来做什么

rewrite模块:实现重写功能
access模块:来源控制
ssl模块:安全加密
ngxhttp_gzipmodule:网络传输压缩模块
ngx_http_proxy_module:模块实现代理
ngx_httpupstreammodule:模块实现定义后端服务器列表
ngxcache_purge:实现缓存清除功能

用过哪些nginx模块?

http_gzip_module #网页压缩模块

http_stup_status_module #状态统计模块

http_auth_basic_module#网页用户认证模块

http_fastcgi_module#fastcgi#转发php-fpm的模块

http rewrite module#URL重气模块

http ssl module#https安全加密模块

http limit conn module#限制最人连接数模块

一、配置nginx隐藏版本号,避免安全漏洞

如何显示版本号:

crul -I(大i)  ip地址
?
 ? ? ? ? server:系统和版本号

1.修改配置文件方式

vim /usr/local/nginx/conf/nginx.conf ? ? ? #进入nginx主配置文件
http {
 ?  include ? ? ? mime.types;
 ?  default_type  application/octet-stream;
添加配置项: ?  server_tokens off; ? ? ? ? ? ? #隐藏版本号信息
 ?  ......
}
?
nginx -t#检查配置文件
systemctl restart nginx#重载nginx

2.修改源代码

vim /opt/nginx-1.12.0/src/core/nginx.h ? ? ? ?  #nginx源码文件
?
#define NGINX_VERSION "1.1.1"                   #修改版本号
#define NGINX_VER "IIS" NGINX_VERSION           #修改服务器类型

退到nginx软件包目录中重新进行编译安装

cd /opt/nginx-1.12.0/

./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module

make && make install
vim /usr/local/nginx/conf/nginx.conf
http {
 ?  include ? ? ? mime.types;
 ?  default_type  application/octet-stream;
 ?  server_tokens on; ?  #将此配置项打开或者注释掉,显示版本号
 ?  ......
}
?
systemctl restart nginx
curl -I ip检查版本号

二、修改用户与组

1.编译安装时--user(指定用户)和--group(指定用户组)

2.修改配置文件

vim /usr/local/nginx/conf/nginx.conf

ser nginx nginx; ? ? ? ? ? #取消注释,修改用户为 nginx ,组为 nginx
?
systemctl restart nginx
?
ps aux | grep nginx
?

三、配置nginx网页缓存时间

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

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

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

修改配置文件vim /usr/local/nginx/conf/nginx.conf

vim /usr/local/nginx/conf/nginx.conf
http {
......
 ?  server {
 ?  ......
 ? ? ?  location / {
 ? ? ? ? ?  root html;
 ? ? ? ? ?  index index.html index.htm;
 ? ? ?  }
?
 ? ? ?  location ~\.(gif|jpg|jepg|png|bmp|ico)$ { ? ?  #加入新的 location,以图片作为缓存对象
 ? ? ? ? ?  root html; ? ? ? ? ? ? ? ? ? ? ? ? ? #存放图片位置
 ? ? ? ? ?  expires 1d; ? ? ? ? ? ? ? ? ? ? ? ?  #指定缓存时间,1天1day
 ? ? ?  #只要是以gif|jpg|jepg|png|bmp|ico为结尾的路径,就会呗location匹配到,从html目录中获取到网页的静态内容,并且让浏览器缓存这些资源一天
 ? ? ?  }
......
 ?  }
}
?
?
nginx -t#检查nginx配置文件修改是否有误
systemctl restart nginx

四、实现nginx的日志分割

日志分割:脚本+crontab

编写脚本进行日志切割的思路

vi /opt/fenge.sh
#!/bin/bash
# Filename: fenge.sh ? ? ? ? ? ? ? #注释信息
#设置变量
day=$(date -d "-1 day" "+%Y%m%d")  #显示前一天的时间
logs_path="/var/log/nginx" ? ? ? ? #nginx日志目录
pid_path="/usr/local/nginx/logs/nginx.pid"#nginx的pid文件的路径
?
[ -d $logs_path ] || mkdir -p $logs_path 
#-d,判断日志文件目录是否存在,如果不存在则创建日志文件目录
mv /usr/local/nginx/logs/access.log ${logs_path}/kgc.com-access.log-$day
#移动并重命名日志文件
kill -USR1 $(cat $pid_path)
#重建新日志文件
find $logs_path -mtime +30 -exec rm -rf {} ;
#删除30天之前修改过的日志文件
(mtime:,ctime,atime)
chmod +x /opt/fenge.sh
?
------------------------------
/opt/fenge.sh
ls /var/log/nginx
ls /usr/local/nginx/logs/access.log 
?
crontab -e
0 0 * * * /opt/fenge.sh ? ?  #使用分时日月周,每天的0点0分做日志分割

补充(ctime/atime/mtime)

在linux操作系统中,每个文件都有很多的时间参数,其中有三个比较主要,分别是
?
ctime,atime,mtime
?
ctime
修改文件属性时间
atime
访问文件的时间
mtime
修改文件内容时间

五、连接超时

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

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

vim /usr/local/nginx/conf/nginx.conf
?
http {
...... 
 ?  keepalive_timeout 60 60; ?
 ? ? ? ? #指定一个长连接最多可以保持多长时间,若将它设置为0,代表关闭长连接,第一个60是指服务器的超时时间,第二个是指客户端的超时时间
 
    keepalive_requests 100; ? ?  #指定一个长连接中最多允许的请求数
?
 ? client_header_timeout 80; ? ? #用于去指定客户端向服务端发送的完整的请求头的超时时间
?
 ? client_body_timeout 80; ? ? ? #指定客户端与服务端建立连接后发送的请求体的超时时间
...... 
}
?
systemctl restart nginx ? ? ? #重启nginx

六、更改nginx运行进程数

修改配置文件的worker_processes参数

  • 一般设为cpu的个数或核数

  • 在高并发的情况下课设置为cpu个数或者核数的2倍

cat /proc/cpuinfo | grep -c "physical id"   #查看cpu核数
ps aux | grep nginx #查看nginx主进程中包含几个子进程

vim /usr/local/nginx/conf/nginx.conf

worker_processes  2;                #修改为核数相同或者2倍
worker_cpu_affinity 01 10;          #设置每个进程由不同cpu处理,进程数配为4时0001 0010 0100 1000
?
worker_rlimit_nofile 63335; ? ? ?  #配置最大并发量

systemctl restart nginx

七、配置网页压缩

vim /usr/local/nginx/conf/nginx.conf http { ...... gzip on; #配置前取消注释,开启gzip压缩功能

 #添加配置选项:
?
 ? gzip_min_length 1k; ? ?          #最小压缩文件大小
 ? gzip_buffers 4 64k; ? ?           #压缩缓冲区,大小为4个64k缓冲区
 ? gzip_http_version 1.1; ? ?   #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
 ? gzip_comp_level 6; ? ? ?      ?  #压缩比率
 ? gzip_vary on;                     ? ? #支持前端缓存服务器存储压缩页面
?
 ? gzip disable"MSIE[1-6]\.";
#配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持)

cd /usr/local/nginx/html
?
先将game.jpg文件传到/usr/local/nginx/html目录下
vim index.html
?
...... 
<img src="game.jpg"/>       #网页中插入图片
</body>
</html>

systemctl restart nginx

八、配置防盗链

防盗链:rewrite

vim /usr/local/nginx/conf/nginx.conf
http {
......
    server {
    ......
        location ~* \.(jpg|gif|swf)$ {
            valid_referers none blocked *.kgc.com kgc.com;#可信任的站点路径
            if ( $invalid_referer ) {
                rewrite ^/ http://www.kgc.com/error.png;
                #return 403;
 ? ? ? ? ?  }
 ? ? ?  }
    ......
    }
}

文章来源:https://blog.csdn.net/HanYuHao11/article/details/135071435
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。