nginx优化和防盗链

nginx优化

1.nginx隐藏版本号

因为是一个高性能,轻量级的工具吗,更新版本速度很快,功能很强大但是BUG很多,很容易被攻破,所以需要隐藏版本号来减少服务器被攻击的威胁。

隐藏版本号的第一步就是如何查看版本号

curl -I 本机IP

nginx优化和防盗链_第1张图片

如何修改?

方法一:

http大模块修改

修改方式:

​​​​​​​server_tokensoff

nginx优化和防盗链_第2张图片

方法二:修改源码文件,然后重写编译安装

nginx优化和防盗链_第3张图片

vim nginx.h

nginx优化和防盗链_第4张图片

然后编译安装: make && make install

最后进入 vim nginx.conf

vim /usr/local/nginx/conf/nginx.conf
 http {
     include       mime.types;
     default_type  application/octet-stream;
     server_tokens on;
     ......
 }
 

nginx优化和防盗链_第5张图片

重起服务即可

nginx日志分割

nginx没有自带的日志分隔功能,所以需要靠运维人员通过脚本实现日志分割

编写脚本:

按照时间来进行分隔,每天都生成一个新的日志
获取日期

d=$(date +%Y-%m-%d)

找到nginx日志的存储位置

dir="/usr/local/nginx/logs"

定义日志分隔
logs_file='/usr/local/nginx/logs/accsee.log'
logs_error='/usr/local/logs/error.log'

定义nginx的pid文件
pid_file='/usr/local/nginx/run/nginx.pid'

if [ ! -d "$dir" ]
then
  mkdir -p $dir
fi

移动日志并重命名

mv ${logs_file}   ${dir}/access_${d}.log

#mv /usr/local/nginx/logs/access.log    /use/local/nginx/logs/access_2.23-10-12.log

mv  ${logs_error}  ${dir}/error_${d}.log

发送信号给nginx的主进程,让nginx重新生成一个新的日志文件

kill  -USR1  $(cat  ${pid_file})

USER1 生成一个新的日志      cat  /usr/local/nginx/run/nginx.pid



日志清理  日志清理原则:业务日志一般保留30天,数据库日志保留2年,用户信息要加密且永久保存,而且高可用

若最近无重大事项,业务日志保留10天也可以,前提是申请批准



find $dir -mtime +30 -exec rm -rf {} \;
设置权限
chmod 777 /opt/nginxlog.sh

设置定时任务

0 1 * * * /opt/nginxlog.sh

3.nginx网页压缩

在Nginx的ngx_http_gzip_module压缩模块提供对文件内容压缩的功能。进行相关的配置修改,就能实现Nginx页面的压缩,达到节约带宽,提升用户访问速度

gzip  on;
开启压缩功

    gzip_min_length 1k;
如果文件大小是1k就不进行压缩处理

    gzip_comp_level 6;
压缩级别:压缩比率  1-9    1是速度快,压缩比最低,9是速度慢,压缩比最高,默认是1
    
    gzip_vary on;
前端的缓存也可以支持压缩
   
    gzip_types text/plain image/jpg test/css test/xml image/gif;
压缩类型

4.nginx图片的缓存时间

可以在日后访问时,不需要经常的向后台请求,加快访问速度

一般都是针对静态页面,动态页面一般不设置缓存时间

vim nginx.conf

 location ~* \.(gif|jpg|jepg|bmp|ico)$ {
        root html;
        expires 1d;

}

nginx优化和防盗链_第6张图片

5.nginx连接超时

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


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


在企业网站中,为了避免同一个客户长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间。可以修改配置文件 nginx.conf,设置 keepalive_timeout超时。

vim nginx.conf


 http {
 ...... 

     keepalive_timeout 65 180;       //设置连接超时时间    
     client_header_timeout 80;
客户端向服务端发送一个完整request header的超时间,如果客户端在80秒内没有发送一个完整的请求头,nginx将会返回408,request time out

     client_body_timeout 80;
客户端于服务器建立连接之后发送request body的超时时间
80秒内客户端没有发送任何内容,nginx 408 request time out
 ...... 
 }

6.nginx的并发设置

在高并发的场景下,需要nginx启用更多的进程来保证快速响应

根据cpu的核心数,可以调整nginx的工作进程数

查看cpu核数

cat /proc/cpuinfo | grep processor | wc -l

vim nginx.conf

#user  nobody;
worker_processes  1;

尽量不要超过8个,8个以上不会对性能提升,会适得其反,一般设置为cpu核数的一半

修改一下进程数和连接数。

worker_process 4;和 event里的 worker_connections 15000;里面的数字相乘就是一共进程数。

二者乘积为最大并发数

nginx优化和防盗链_第7张图片

注意:别忘了修改limits.conf的文件限制

绑定cpu:

#user nobody;
       worker_processes 1;
       worker_cpu_affinity 0001 0010 0100 1000;
       把进程绑定到CPU上,减少CPU的切换,提高效率
}

TIME_WAIT大量出现,改如何优化

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

time-wait是tcp连接状态的一种状态,不是报错,出现在四次挥手之后

在time_wait这个状态下,tcp处于连接等待状态,等待有一个持续时间,http 1.1 会话保持

1.确保可靠的关闭连接

2.避免连接复用

他在连接正常关闭之后,一段时间之后,它会自动消失,而且占用的资源很少,对服务器影响是有限的。

如果太多,则进内核文件修改

net.ipv4_tcp_syncookies = 1
表示SYN等待队列溢出时,启用cookies处理syn队列

net.ipv4_tcp_tw_reuse = 1
time_wait 状态可以重用,一个连接就占用一个端口,time_wait把所有端口占满了,新的连接请求也不会拒绝。

net.ipv4_tcp_tw_recycle = 1
让time_wait 尽快回收

net.ipv4_tcp_fin_timeout = 60
所有time_wait 最大生命周期60s

nginx的内置变量:打印结果

$remote_addr 客户端IP地址

下载形式出现

nginx优化和防盗链_第8张图片

location / {
            root   html;
            index  index.html index.htm;
            return 200 "ip:$remote_addr";
        }

\n后面可以追加多个

$remote_port #显示客户端的端口号

nginx优化和防盗链_第9张图片

nginx优化和防盗链_第10张图片

$url

#显示请求的url

nginx优化和防盗链_第11张图片

nginx优化和防盗链_第12张图片

/是nginx的家目录

$host

#显示请求的主机名

nginx优化和防盗链_第13张图片

nginx优化和防盗链_第14张图片

$request_method 显示请求方法

重要的变量配置


proxy_set_header X-Forwarded-for $remote_addr #代理服务器设置这个变量,客户端的真实ip要发送给后端,否则代理服务器地址会被拉入黑名单。

proxy_set_header X-Real-IP $remote_addr #客户端的真实ip,发送给后端,现在所有网站都会要求客户端请求时,加上真实ip。例如:微信,微博,B站,都会显示IP地址。
 

nginx设置防盗链

准备两台服务器

systemctl stop firewalld

setenforce 0

systemctl restart nginx

test1是主站

test2是副站

vim nginx.conf


server {
        listen       80;
        server_name  www.abc.com;

        #charset koi8-r;
        charset utf-8;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }
        location ~* \.(jpg|gif)$ {
            root html;
            valid_referers none blocked *.abc.com abc.com;
        #valid_referers:设置信任的网站,即 abc.com
        #none:允许没有http_refer的请求访问资源,请求的url里面可以不包含refer,www.abc.com就可以直接访问 www.abc.com/aaa.jpg
        #blocked:请求网站时,前面可以不带协议(http)。
            if ( $valid_referer ) {
               rewrite ^/ http://www.sbc.com/error.png'
}
             #如果连接资源是来自上面valid_referers定义的信任列表,$valid_referer变为true,执行重定向

nginx优化和防盗链_第15张图片

nginx优化和防盗链_第16张图片

systemctl restart nginx

vim index.html #写入内容

nginx优化和防盗链_第17张图片

域名访问一定要做映射!!!

nginx优化和防盗链_第18张图片

test2:

nginx优化和防盗链_第19张图片

同样得做映射

nginx优化和防盗链_第20张图片

访问即可

你可能感兴趣的:(nginx,服务器,linux)