Linux NGINX 优化与防盗链

这篇具有很好参考价值的文章主要介绍了Linux NGINX 优化与防盗链。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 ----------------隐藏版本号-------------------

可以使用 Fiddler 工具抓取数据包,查看 Nginx版本,
也可以在 CentOS 中使用命令 curl -I http://192.168.80.101 显示响应报文首部信息。
curl -I http://192.168.80.101

方法一:修改配置文件方式

修改nginx配置,关闭版本号显示

vim /usr/local/nginx/conf/nginx.conf
http {
    include       mime.types;
    default_type  application/octet-stream;
    server_tokens off;                                #添加,关闭版本号
    ......
}

 重启服务,查看版本信息 

systemctl restart nginx
curl -I http://192.168.80.101

Linux NGINX 优化与防盗链 Linux NGINX 优化与防盗链

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

修改源码内版本号

vim /opt/nginx-1.22.0/src/core/nginx.h

#define NGINX_VERSION "1.1.1"                     #修改版本号
#define NGINX_VER "IIS" NGINX_VERSION             #修改服务器类型

 配置软件

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

 编译安装

make && make install

 安装完成后修改nginx配置文件,打开服务器标识

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

http {
    include       mime.types;
    default_type  application/octet-stream;
    server_tokens on;     #打开服务器标识
    ......
}

重启服务,查看版本信息 

systemctl restart nginx
curl -I http://192.168.80.101

Linux NGINX 优化与防盗链Linux NGINX 优化与防盗链

----------------修改用户与组-------------------

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

第一行
user nginx nginx;
#取消注释,修改用户nginx ,组nginx

重启服务,查看进程信息 

systemctl restart nginx
ps aux | grep nginx


主进程nginx由root创建(管理work进程,读取配置文件),子进程work由nginx创建(接收用户请求)

Linux NGINX 优化与防盗链

  ----------------缓存时间-------------------

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

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

http { #设置在http块中范围最大,缓存设置对所有页面生效
......
    server { #设置在server块中只对该虚拟主机(server)下页面生效
    ...... 
        location / { #设置在location块中只对该页面生效
            root html;
            index index.html index.htm;
        }
        
        location ~ \.(gif|jpg|jepg|png|bmp|ico)$ {      #加入新的 location,以图片作为缓存对象
            root html;        #指定缓存文件位置,相对路径/html文件夹中
            expires 1d;       #指定缓存时间,1d 1天     1h 1小时
        }
......
    }
}

如果只有静态页面,直接http或server块中设置。

如果有动态页面也有静态页面,expires只能加在location中,用条件匹配相关的静态页面进行缓存

重启服务

systemctl restart nginx

 准备网页文件

vim /usr/local/nginx/html/index.html

<html>
  <body>
        <h1>this is a nginx web</h1>
        <img src=1.gif />
  </body>
</html>

浏览器访问 192.168.80.101 

在Linux系统中,打开火狐浏览器,右击点查看元素
选择 网络 ---> 选择 HTML、WS、其他 
访问 http://192.168.80.101/1.gif,双击200响应消息查看响应头中包含 Cahce-Control:max-age=86400 表示缓存时间是 86400 秒。也就是缓存一天的时间,一天之内浏览器访问这个页面,都是用缓存中的数据,而不需要向 Nginx 服务器重新发出请求,减少了服务器的使用带宽。

 Linux NGINX 优化与防盗链

----------------日志切割-------------------

NGINX不具备日志分隔功能,但可以通过NGINX信号控制功能配合脚本,写入计划任务 实现日志的自动切割

编写日志分隔脚本(每一次计划任务执行脚本,都移走日志文件并重命名,然后kill -usr1生成新日志,删除30天以上日志)

vim /opt/fenge.sh

#!/bin/bash
# Filename: fenge.sh
lastday=$(date -d "-1 day" "+%Y%m%d")      #显示前一天的时间
logs_path="/var/log/nginx"                 #指定存放日志目录
pid_path="/usr/local/nginx/logs/nginx.pid" #进程文件路径。用于获取进程号
nginx_home="/usr/local/nginx"              #nginx的工作目录

[ -d $logs_path ] || mkdir -p $logs_path         #若目录不存在 创建日志文件目录 也可以if来写
mv $nginx_home/logs/access.log $logs_path/xue.com-access.log-$lastday
mv $nginx_home/logs/error.log $logs_path/xue.com-error.log-$lastday
#将日志文件/usr/local/nginx/logs/access.log,error.log移走并根据date重命名
kill -USR1 $(cat $pid_path)                       #kill -USR1 pid,重建新日志文件
find $logs_path -mtime +30 -exec rm -rf {} \;     #查找30天之前的文件,rm删除
#find $logs_path -mtime +30 | xargs rm -rf        #查找30天之前的文件,rm删除

 脚本加权限

chmod +x /opt/fenge.sh
/opt/fenge.sh #执行测试

显示日志 

ls /var/log/nginx                     #yum安装nginx日志目录
ls /usr/local/nginx/logs/access.log   #源码安装nginx日志目录

启用定时任务 定时日志分隔

crontab -e
0 1 * * * /opt/fenge.sh
#每天1点执行

--------------------------------------------------小知识--------------------------------------------------
在linux操作系统中,每个文件都有很多的时间参数,其中有三个比较主要,分别是ctime,atime,mtime

ctime(status time):
当修改文件的权限或者属性的时候,就会更新这个时间,ctime并不是create time,更像是change time,
只有当更新文件的属性或者权限的时候才会更新这个时间,但是更改内容的话是不会更新这个时间。

atime(accesstime):
当使用这个文件的时候就会更新这个时间。

mtime(modification time):
当修改文件的内容数据的时候,就会更新这个时间,而更改权限或者属性,mtime不会改变,这就是和ctime的区别。
----------------------------------------------------------------------------------------------------------

----------------连接超时-------------------

HTTP有一个KeepAlive模式,它告诉web服务器在处理完一个请求后保持这个TCP连接的打开状态。若接收到来自同一客户端的其它请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接。
KeepAlive 在一段时间内保持打开状态,它们会在这段时间内占用资源。占用过多就会影响性能。

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

http {
...... 
    keepalive_timeout 60 55;
    keepalive_requests 10000;
    client_header_timeout 80;
    client_body_timeout 80;
...... 
}

重启服务 

systemctl restart nginx

----------------------------------------------------------------------------------------------------------
keepalive_timeout
指定KeepAlive的超时时间(timeout)。指定一个长连接最多可以保持多长时间,服务器将会在这个时间后关闭连接。 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)。

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

由于服务器发送关闭连接请求后在完全关闭前还需要等待TIME_WAIT的2MSL(一般4分钟)

如果是高并发大负载的情况下,保持4分钟连接再关闭就会浪费很多资源,于是就有了keepalive_timeout 60 60;第二段的Keep-Alive浏览器主动关闭连接时间设置,由浏览器主动关闭连接,浏览器进入TIME_WAIT等待2MSL,不浪费服务器资源。

高并发下TIME WAIT特别多怎么办?(重中之重)

设置长链接keepalive_timeout 60 55;(第二段浏览器主动断开时间小于前面服务器断开时间,让浏览器主动断开)

Linux NGINX 优化与防盗链

浏览器访问,查看响应透keep—alive信息 

 Linux NGINX 优化与防盗链

 ----------------更改进程数-------------------

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

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

查看CPU核数,进程数量,以便参考调整

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处理,有多少CPU写多少位。进程数配为4时0001 0010 0100 1000
#将每个worker子进程与特定CPU物理核心绑定,提升cpu利用率,进而提升性能。避免同一个worker子进程在不同的CPU核心上切换或者多个进程跑在一个CPU上,缓存失效,降低性能。

重启服务

systemctl restart nginx

Linux NGINX 优化与防盗链

---------- 设置并发(进程连接数,进程打开文件数,系统限制打开文件数)----------

进程连接数 ^ 进程打开文件数修改

vim /usr/local/nginx/conf/nginx.conf
       worker_rlimit_nofile 60000; #设置所有worker进程最大可以打开的文件数,默认为1024
       worker_connections  60000;  #每个进程处理 60000 个连接 与上一步全局配置设置的最大文件数相同

虽然在nginx配置中可以直接更改worker_rlimit_nofile 60000,但是系统可能不支持。

使用 ulimit -a 命令查看系统可打开最大文件数,ulimit -n临时修改,/etc/security/limits.conf永久修改。

ulimit -a

Linux NGINX 优化与防盗链

临时修改
ulimit -n 60000
永久修改 重启生效
vim /etc/security/limits.conf

*                soft    nofile          65535
*                hard    nofile          65535
#任意用户      软/硬限制  一个进程可打开最大文件数65535      

Linux NGINX 优化与防盗链

 ----------------配置网页压缩------------------- 

Nginx的ngx_http_gzip_module压缩模块提供对文件内容压缩的功能
允许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;               #压缩比率 9最大1最小
   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;        #压缩类型,表示哪些网页文档启用压缩功能
...... 
}

···················································

gzip on;
gzip_min_length 1k;
gzip_buffers 4 64k;
gzip_http_version 1.1;
gzip_comp_level 6;
gzip_vary on;
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;

 先将1.gif文件传到/usr/local/nginx/html目录下

cd /usr/local/nginx/html

更改网页文件

vim index.html

...... 
<img src="1.gif"/>          #网页中插入图片
</body>
</html>

 重启服务

systemctl restart nginx

在Linux系统中,打开火狐浏览器,右击点查看元素
选择 网络 ---> 选择 HTML、WS、其他 
访问 http://192.168.80.101 ,双击200响应消息查看响应头中包含 Content-Encoding: gzip

Linux NGINX 优化与防盗链

----------------配置防盗链-------------------

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

http {
......
    server {
    ......
    location ~* \.(jpg|gif|swf)$ {
            valid_referers none blocked *.xue.com xue.com;
            if ( $invalid_referer ) {
                    rewrite ^/ http://www.xue.com/error.png;
                    #return 403;
            }
    }

    ......
    }
}


----------------------------------------------------------------------------------------------------------
~* \.(jpg|gif|swf)$ :这段正则表达式表示匹配不区分大小写,以.jpg 或.gif 或.swf 结尾的文件;
valid_referers :设置信任的网站,可以正常使用图片;
none:允许没有http_refer的请求访问资源(根据Referer的定义,它的作用是指示一个请求是从哪里链接过来的,如果直接在浏览器的地址栏中输入一个资源的URL地址,那么这种请求是不会包含 Referer 字段的),如 http://www.xue.com/1.gif
我们使用 http://www.xue.com 访问显示的图片,可以理解成 http://www.xue.com/1.gif 这个请求是从 http://www.xue.com 这个链接过来的。
blocked:允许不是http://开头的,不带协议的请求访问资源; 
*.xue.com:只允许来自指定域名的请求访问资源,如 http://www.xue.com

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

网页准备

Web源主机(192.168.80.101)配置


将1.gif、error.png文件传到/usr/local/nginx/html目录下

cd /usr/local/nginx/html

编辑页面文件,包含需要显示的图片

vim index.html
...... 
<img src="1.gif"/>
</body>
</html>

写入host文件 临时域名解析

echo "192.168.80.101 www.xue.com" >> /etc/hosts
echo "192.168.80.102 www.benet.com" >> /etc/hosts

盗链网站主机(192.168.80.102)

编辑网页文件,引用源站图片

cd /usr/local/nginx/html

vim index.html

<html>
<body>
THIS IS DAOLIAN
<img src="http://www.xue.com/1.gif"/>
</body>
</html>

写入host文件 临时域名解析

echo "192.168.80.101 www.xue.com" >> /etc/hosts 
echo "192.168.80.102 www.benet.com" >> /etc/hosts 

在盗图网站主机上进行浏览器验证
        http://www.benet.comLinux NGINX 优化与防盗链

----------------fpm参数优化-------------------

Nginx的PHP解析功能实现如果是交由FPM处理的,为了提高PHP的处理速度,可对FPM模块进行参数的调整
根据服务器的内存与服务负载,调整FPM模块参数

编辑 php-fpm.conf 文件,设置pid路径,方便管理

设置pid路径,默认在安装目录中的var/run/php-fpm.pid,开启后可以通过pid文件快速获得服务的PID号管理进程,精确获取进程pid

        为第三步做准备        

        kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`文章来源地址https://www.toymoban.com/news/detail-469473.html

vim /usr/local/php/etc/php-fpm.conf

pid = run/php-fpm.pid

编辑www.conf文件,设置PHP进程配置

vim /usr/local/php/etc/php-fpm.d/www.conf

--96行--
pm = dynamic                #fpm进程启动方式,动态的
--107行--
pm.max_children=20          #fpm进程启动的最大进程数
--112行--
pm.start_servers = 5        #动态方式下启动时默认开启的进程数,在最小和最大之间
--117行--
pm.min_spare_servers = 2    #动态方式下最小空闲进程数
--122行--
pm.max_spare_servers = 8    #动态方式下最大空闲进程数

重启php-fpm 

kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`            #重启php-fpm
netstat -anpt | grep 9000
ps -elf | grep php-fpm

nginx 优化总结(你做过那些优化?【重中之重】)

应用程序级别的优化

隐藏版本号 server_tokens off;
设置运行用户/组 user   用户组  组名;
页面缓存时间 expires 时间;
连接保持超时 keepalive_timeout  服务器超时时间  [客户端超时时间]; (修改后面比前面小避免大量TIME_WAIT)
设置工作进程数 worker_processes  auto;        或者同CPU数量       worker_cpu_affinity 绑核
设置并发 worker_rlimit_nofile / worker_connections (并且还要在系统调优中设置打开最大文件数)
网页压缩 gzip on
防盗链 rewrite 
IO模型 IO多路复用 events { use epoll; }
日志分割 脚本

系统内核级别的优化

  • 修改内核打开文件数
ulimit -n    
/etc/security/limits.conf  
*                soft    nofile          65535            打开文件数
*                hard    nofile          65535
*                soft    nproc           65535            打开进程数
*                hard    nproc           65535
*                soft    memlock         unlimited        内存锁定不限制
*                hard    memlock         unlimited
  • 修改系统网络连接配置避免大量的断开连接时TIME_WAIT 
/etc/sysctl.conf
net.ipv4.tcp_syncookies =1            开启SYNCookies
net.ipv4.tcp_tw_reuse = 1            允许将TIME-WAIT sockets重新用于新的TCP连接,
net.ipv4.tcp_tw_recycle = 1            开启TCP连接中TIME-WAIT sockets的快速回收
net.ipv4.tcp_fin_timeout = 30        修改系统默认的fin TIMEOUT 时间

net.ipv4.ip_local_port_range = 1024 65535   外向连接的端口范围
net.ipv4.tcp max tw buckets= 5000           系统同时保持TIME WAIT最大数量         
net.ipv4.tcp_max_syn_backlog = 8192         SYN队列长度
net.ipv4.tcp_keepalive_time = 1200          发送keepalive探测包消息的频度

你用过那些nginx模块?(重中之重)

cd /opt/nginx-1.22.0/auto/
cat options | grep YES
查看nginx模块
http_gzip_static_module 网页压缩模块
stub_status_module 状态统计模块
rewrite_module URL重写模块
auth_basic_module 用户认证模块
fastcgi_module fastcgi转发php-fpm模块
ssl_module https 安全加密认证模块
proxy_module 请求转发模块
upstream_*_module 反向代理负载均衡模块
stream_*_module 四层反向代理模块
limit_conn_module 限制最大连接数模块
limit_reg_module 限制最大访问频率模块

到了这里,关于Linux NGINX 优化与防盗链的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Nginx优化&&安全&&防盗链

     在Nginx的ngx_http_gzip_module压缩模块提供对文件内容压缩的功能。进行相关的配置修改,就能实现Nginx页面的压缩,达到节约带宽,提升用户访问速度 当Nginx将网页数据返回给客户端后,可设置缓存的时间,以方便在日后进行相同内容的请求时直接返回,避免重复请求,加快了

    2024年02月11日
    浏览(37)
  • nginx的优化和防盗链

    可以使用 Fiddler 工具抓取数据包,查看 Nginx版本, 也可以在 CentOS 中使用命令 curl -I http://192.168.81.129 显示响应报文首部信息。 方法一: 当Nginx将网页数据返回给客户端后,可设置缓存的时间,以方便在日后进行相同内容的请求时直接返回,避免重复请求,加快了访问速度 一

    2024年02月07日
    浏览(34)
  • nginx页面优化与防盗链

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 对版本号进行更改的目的:可以根据nginx的版本号进行破译,因此都会隐藏后端服务应用的真实版本号 1.1 查看版本号 1.2 修改版本号 1.2.1 修改配置文件 1.2.2 修改源码文件,重新编译安装 为什么做日志分

    2024年02月11日
    浏览(46)
  • Nginx的优化,安全与防盗链

     在Nginx的ngx_http_gzip_module压缩模块提供对文件内容压缩的功能。进行相关的配置修改,就能实现Nginx页面的压缩,达到节约带宽,提升用户访问速度   重启服务,进行访问测试:    压缩已经生成 (accept- Encoding) 当Nginx将网页数据返回给客户端后,可设置缓存的时间,以方

    2024年02月02日
    浏览(37)
  • Nginx的优化和防盗链(面试高频!!!)

    修改配置文件时,先备份!!!以便回滚!!! nginx页面优化 一、隐藏版本号: 方法一:修改配置文件 在http模块中,添加一个命令: 方法二:在源码包中修改(达到混淆入侵者的目的) 二、nginx的日志分割: 因为nginx不带日志分割工具,所以需要使用脚本形式来进行日志

    2024年02月14日
    浏览(35)
  • Nginx服务优化措施、网页安全与配置防盗链

    目录 一.优化Nginx 二.隐藏/查看版本号 隐藏版本号方法一:修改配置文件,关闭版本号  隐藏版本号方法二:修改源码文件中的版本号,重新编译安装 三.修改用户与组 四.设置缓存时间 五.日志切割脚本 六.设置连接超时控制连接访问时间 七.开启多进程 八.配置网页压缩 九

    2024年02月07日
    浏览(45)
  • nginx上web服务的基本安全优化、服务性能优化、访问日志优化、目录资源优化和防盗链配置简介

    目录 一.基本安全优化 1.隐藏nginx软件版本信息 2.更改源码来隐藏软件名和版本 (1)修改第一个文件(核心头文件),在nginx安装目录下找到这个文件并修改 (2)第二个文件 (3)第三个文件,内置响应信息页面 (4)第四个文件 (5)重新编译安装并重启 3.更改nginx服务的默

    2024年02月13日
    浏览(45)
  • Nginx(动静分离、分配缓冲区、资源缓存、防盗链、资源压缩、IP黑白名单、大文件传输配置、跨域配置、高可用、性能优化)

    首先通过SpringBoot+Freemarker快速搭建一个WEB项目:springboot-web-nginx,然后在该项目中,创建一个IndexNginxController.java文件,逻辑如下: index.ftl页面 从响应中获取了port输出 nginx.conf配置文件修改 至此,所有的前提工作准备就绪,紧接着再启动Nginx,然后再启动两个web服务,第一个

    2024年02月09日
    浏览(42)
  • nginx重写与防盗链

    目录 一、ngx_http_rewrite_module作用: 二、ngx_http_rewrite_module模块指令:   1. if 指令:       1.1 格式:     1.2 判断:    1.3 示例:     2. return:     2.1 格式:     2.2 示例:  3. rewrite :   3.1  格式:   3.2 flag标记说明:    3.3 示例: 三、防盗链:   1. valid_referers  信息分类:

    2024年02月11日
    浏览(40)
  • Nginx 禁止IP访问 只允许域名访问,以及Nginx防盗链设置

           我们在使用的时候会遇到很多的恶意IP攻击,这个时候就要用到Nginx 禁止IP访问了。今天要在Nginx上设置禁止通过IP访问服务器,只能通过域名访问,这样做是为了避免别人把未备案的域名解析到自己的服务器IP而导致服务器被断网。        下面我们就先看看Ngi

    2024年02月11日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包