一、配置Nginx隐藏版本号

  • 隐藏Nginx版本号,避免安全漏洞泄漏
  • Nginx隐藏版本号的方法
    修改配置文件法
    修改源码法

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

curl -I http://192.168.154.10
  • 1

1、第一种方法修改配置文件

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



2、第二种方法修改源码文件,重新编译安装

vim /opt/nginx-1.22.0/src/core/nginx.h #修改源码文件

./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make && make install
vim /usr/local/nginx/conf/nginx.conf
  • 1

systemctl restart nginx.service
curl -I 192.168.154.10
  • 1
  • 2


二、修改Nginx用户与组

  • Nginx运行时进程需要有用户与组的支持,以实现对网站文件读取时进行访问控制
  • Nginx默认使用nobody用户账号与组账号
  • 修改的方法
    编译安装时指定用户与组
    修改配置文件指定用户与组
vim /usr/local/nginx/conf/nginx.conf
user root nginx; #取消注释,修改用户为 root ,组为 nginx systemctl restart nginx

ps aux | grep nginx

主进程由root创建,子进程由nginx创建


三、配置Nginx网页缓存时间

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

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

location ~ .(png|jpg|jpeg|gif)$ {     #加入新的 location,以图片作为缓存对象

root html;

expires 1d; #指定缓存时间,一天

}

响应头中包含 Cahce-Control:max-age=86400 表示缓存时间是 86400 秒。也就是缓存一天的时间,一天之内浏览器访问这个页面,都是用缓存中的数据,而不需要向 Nginx 服务器重新发出请求,减少了服务器的使用带宽。

四、实现Nginx的日志分割

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

#获取前一天日期

LASTDAY=\((</span><span class="token function">date</span> -d <span class="token string">"-1 day"</span> +%Y%m%d<span class="token variable">)</span></span>
<span class="token comment">#定义日志分割后存放日志的目录</span>
<span class="token assign-left variable">LOGPATH</span><span class="token operator">=</span><span class="token string">"/var/log/nginx"</span>
<span class="token assign-left variable">NGINXHOME</span><span class="token operator">=</span><span class="token string">"/usr/local/nginx"</span>
<span class="token assign-left variable">PIDPATH</span><span class="token operator">=</span><span class="token string">"<span class="token variable">\)NGINXHOME/logs/nginx.pid" #创建存放日志的目录

if [ ! -d \(LOGPATH</span> <span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">then</span>
<span class="token function">mkdir</span> -p <span class="token variable">\)LOGPATH

fi #分割日志

mv \(NGINXHOME</span>/logs/access.log <span class="token variable">\)LOGPATH/access.log-\(LASTDAY</span>
<span class="token function">mv</span> <span class="token variable">\)NGINXHOME/logs/error.log \(LOGPATH</span>/error.log-<span class="token variable">\)LASTDAY #nginx生成新日志文件

kill -USR1 $(cat $PIDPATH) #删除90天以前的旧日志文件

find $LOGPATH -mtime +90 -delete

chmod +x log.sh
./log.sh
ls /var/log/nginx



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

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

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

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

五、配置Nginx实现连接超时

  • 为避免同一客户端长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间。
  • 超时参数
    Keepalive_timeout:设置连接保持超时时间
    Client_header_timeout:指定等待客户端发送请求头的超时时间
    Client_body_timeout:设置请求体读超时时间

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

vim /usr/local/nginx/conf/nginx.conf
    keepalive_timeout  65 60;
client_header_timeout 80;
client_body_timeout 80;



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)。

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

六、更改Nginx运行进程数

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

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

worker_processes auto; #自动配置核数

systemctl restart nginx

  • 默认情况,Nginx的多个进程可能跑在一个CPU上,可以分配不同的进程给不同的CPU处理,充分利用硬件多核多CPU
  • 在一台4核物理服务器,进行配置,将进程进行分配
vim /usr/local/nginx/conf/nginx.conf
worker_processes auto;
worker_cpu_affinity 01 10; #绑定CPU,设置每个进程由不同cpu处理
systemctl restart nginx

七、配置Nginx实现网页压缩功能

  • Nginx的ngx_http_gzip_module压缩模块提供对文件内容压缩的功能

  • 允许Nginx服务器将输出内容在发送客户端之前进行压缩,以节约网站带宽,提升用户的访问体验,默认已经安装

  • 可在配置文件中加入相应的压缩功能参数对压缩性能进行优化

压缩功能参数

  • gzip on: 开启gzip压缩输出
  • gzip_min length 1k: 设置允许压缩的页面最小字节数
  • gzip buffers 4 16k: 申请4个单位为16k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果
  • gzip_http_version 1.0: 设置识别http协议版本,默认是1.1目前大部分浏览器已经支持gzip解压,但处理较慢,也比较消耗服务器CPU资源
vim /usr/local/nginx/conf/nginx.conf
http {
......
gzip on; #取消注释,开启gzip压缩功能
gzip_min_length 1k; #最小压缩文件大小
gzip_buffers 4 16k; #压缩缓冲区,大小为4个16k缓冲区
gzip_http_version 1.1; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
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; #压缩类型,表示哪些网页文档启用压缩功能
......
}

cd /usr/local/nginx/html/  #在该目录下插入图篇,并创建game.html
systemctl restart nginx
  • 1
  • 2

八、配置Nginx防盗链

  • 在企业网站服务中,一般都要配置防盗链功能,以避免网站内容被非法盗用,造成经济损失
  • Nginx防盗链功能也非常强大。默认情况下,只需要进行简单的配置,即可实现防盗链处理
  • 示例
    使用两台主机模拟盗链
    192.168.154.10 www.accp.com 源主机
    192.168.154.11 www.benet.com 盗链主机
vim /usr/local/nginx/conf/nginx.conf

http {

......

server {

......

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

root html;

expires 1d;
               valid_referers *.accp.com accp.com none blocked;
if ($invalid_referer) {
rewrite /* http://www.accp.com/error.png;
}
}

......

}

}

systemctl restart network

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

  • valid_referers :设置信任的网站,可以正常使用图片;

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

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

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

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




在盗链主机里准备盗链网页
再开一台centos服务器,安装httpd

yum install -y httpd
cd /var/www/html
<html>
<body>
<h1>this is dao lian web!</h1>
<img src="http://192.168.154.10/game.jpg" />
</body>
</html>


添加域名

测试结果

[转帖]Nginx优化与防盗链的更多相关文章

  1. 16.Nginx优化与防盗链

    Nginx优化与防盗链 目录 Nginx优化与防盗链 隐藏版本号 修改用户与组 缓存时间 日志切割 小知识 连接超时 更改进程数 配置网页压缩 配置防盗链 配置防盗链 隐藏版本号 可以使用 Fiddl ...

  2. Nginx优化与防盗链

    目录: 一.隐藏版本号 二.修改用户与组 三.缓存时间 四.日志切割 五.连接超时 六.更改进程数 七.配置网页压缩 一.隐藏版本号 可以使用 Fiddler 工具抓取数据包,查看 Nginx版本 也 ...

  3. Nginx的优化与防盗链

    Nginx的优化与防盗链 1.隐藏版本号 2.修改用户与组 3.缓存时间 4.日志切割 5.连接超时 6.更改进程数 7.配置网页压缩 8.配置防盗链 9.fpm参数优化 1.隐藏版本号: 可以使用 ...

  4. nginx的优化和防盗链

    nginx的优化和防盗链 目录 nginx的优化和防盗链 一.nginx的优化 1. 隐藏版本号 (1)隐藏版本号的原因 (2)查看版本号的方法 (3)隐藏方法一:修改配置文件 (4)隐藏方法二:修改 ...

  5. nginx secure_link下载防盗链

    下载服务器上有众多的软件资源, 可是很多来源不是本站,是迅雷.flashget, 源源不断的带宽,防盗链绝对是当务之急. 使用来源判断根本不靠谱,只能防止一些小白站点的盗链,迅雷之类的下载工具完全无效 ...

  6. nginx如何设置防盗链

    关于nginx防盗链的方法网上有很多教程,都可以用,但是我发现很多教程并不完整,所做的防盗链并不是真正的彻底的防盗链! 一般,我们做好防盗链之后其他网站盗链的本站图片就会全部失效无法显示,但是您如果通 ...

  7. nginx服务器图片防盗链的方法

    nginx服务器图片防盗链的方法<pre> location ~* \.(gif|jpg|png|jpeg)$ { expires 30d; valid_referers *.shuche ...

  8. 【转】nginx如何设置防盗链

    转自博客园作者:howhy,文章地址:nginx如何设置防盗链.大佬写的甚好,在此备份一下 关于nginx防盗链的方法网上有很多教程,都可以用,但是我发现很多教程并不完整,所做的防盗链并不是真正的彻底 ...

  9. Nginx 十大优化 与 防盗链

    Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器.Ngin ...

  10. nginx的优化及防盗链

    简介: Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为"engine X",是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/S ...

随机推荐

  1. BeanDefinition解密:构建和管理Spring Beans的基石

    本文分享自华为云社区<Spring高手之路11--BeanDefinition解密:构建和管理Spring Beans的基石>,作者: 砖业洋__ . BeanDefinition是Spr ...

  2. 带你了解TensorFlow pb模型常用处理方法

    摘要:TensorFlow 模型训练完成后,通常会通过frozen过程保存一个最终的pb模型. 本文分享自华为云社区<TensorFlow pb模型修改和优化>,作者:luchangli. ...

  3. Hudi自带工具DeltaStreamer的实时入湖最佳实践

    摘要:本文介绍如何使用Hudi自带入湖工具DeltaStreamer进行数据的实时入湖. 本文分享自华为云社区<华为FusionInsight MRS实战 - Hudi实时入湖之DeltaStr ...

  4. React Native 打包 App 发布 iOS 及加固混淆过程

    React Native 打包 App 发布 iOS 及加固混淆过程 摘要 本文将介绍如何使用 React Native 打包并发布 iOS 应用到 App Store,并介绍了如何进行应用的加固和混 ...

  5. Appuploader工具让ipa上传到App Store 的最新流程和步骤

    ​ 苹果官方提供的工具xcode上架ipa非常复杂麻烦.用appuploader 可以在 mac 和windows 上制作管理 证书 ,无需钥匙串工具 条件:1.以Windows为例,创建app打包i ...

  6. 如何在NET 6.0使用结构化的日志系统

              在我们的系统里面,有一项技术是必须使用的,那就是日志记录.我们在调试系统或者跟踪系统运行情况,都可以通过日志了解具体的情况.在项目开发中,我们有可能使用系统本身所带的日志系统,也有 ...

  7. DataLeap的Catalog系统近实时消息同步能力优化

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 摘要 字节数据中台DataLeap的Data Catalog系统通过接收MQ中的近实时消息来同步部分元数据.Apa ...

  8. 对不起,你做的 A/B 实验都是错的——火山引擎 DataTester 科普

    DataTester 是火山引擎数智平台旗下产品,能基于先进的底层算法,提供科学分流能力和智能的统计引擎,支持多种复杂的 A/B 实验类型.DataTester 深度耦合推荐.广告.搜索.UI.产品功 ...

  9. QA: Solon 怎么输出下载文件流?

    Solon 的Mvc可以直接返回 DownloadedFile 或者 File 对象 @Mapping("/demo/down") @Controller public class ...

  10. 断点续传(上传)Java版

    PostMan 客户端调用部分见,断点续传(上传)C#版 1. 客户每次上传前先获取一下当前文件已经被服务器接受了多少 2. 上传时设定偏移量,跳过服务器已收到的长度 @SpringBootTest ...