nginx的优化和防盗链

目录

一、nginx的优化

1、隐藏版本号:

2、nginx日志分割:

3、网页压缩

4、设置nginx的图片缓存时间

5、连接超时:

6、nginx的并发设置

7、怎么才能让time_wait快速消失:

二、nginx的内置变量

1、nginx常用变量汇总:

三、nginx如何设置防盗链:


一、nginx的优化

1、隐藏版本号:

nginx bug较多,更行版本速度比较快,所以一旦版本号泄露出去,有可能被对方攻击

查看版本号:curl -I 20.0.0.20

f12进入浏览器后台查看:

第一种修改方式:

进入nginx.conf

在http块中修改隐藏,不再server中,也不是location

server_tokens off;

第二个修改方式:

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

解压后进入源码文件,/src/core/nginx.h  13和14行,重新编译安装,安装路径不要改,用原来的

进入nginx.conf中打开版本号

重新编译安装nginx,注意:安装目录不能变

2、nginx日志分割:

ginx没有自带的日志分割功能,靠我们运维人员通过脚本实现日志分割。

#!/bin/bash

#按照时间来进行分割,每天都生成一个新的日志。

#获取日期

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

#找到nginx日志的存储位置

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

#定义分割的源日志

logs_file='/usr/local/nginx/logs/access.log'

logs_error='/usr/local/nginx/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 /usr/local/nginx/logs/access_2023-10-12.log

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

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

kill -USR1 $(cat ${pid_file})

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

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

#业务日志如果最近无重大事项,保留10天之内的也可以,但是要申请批准。

find $dir -mtime +30 -exec rm -rf {} \;

3、网页压缩

要有下面这个模块:nginx -V

http_gzip_static_module

可以对文件内容和图片进行压缩的功能,节约宽带

格式:

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;

去html目录下放一张 ls.jpg文件

去20.0.0.10/ls.jpg

4、设置nginx的图片缓存时间

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

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

5、连接超时:

主要配置keepalive_timeout 60-120;

6、nginx的并发设置

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

根据Cpu的核心数可以调整nginx的工作进程数。

查看Cpu核数:

cat /proc/cpuinfo | grep -c processor

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

worker_processes 一般生成设4个足够了

8个以上性能降低;太多了会频繁的在Cpu上进行切换

如何将进程绑定cpu:

worker_connections 一般15000-20000

两个相乘就是最大并发数

别忘了修改limits.conf。否则不生效。

改最大并发数不仅要改nginx.conf还要改limits.conf

TIME_WAIT大量出现该如何优化。

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

time_wait是tcp连接状态中的一种状态,不是报错!出现在四次挥手之后。

在time_wait状态下,tcp处于连接等待状态,等待有一个持续时间 http1.1的会话保持

作用:

  1. 确保可靠的关闭连接
  2. 避免连接复用

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

7、怎么才能让time_wait快速消失:

修改内核文件:

在/etc/sysctl.conf文件中

net.ipv4.tcp_syncookies = 1

#表示开SYN cookies

当出现SYN等待队列溢出时,启用cookies处理syn队列,默认是0 。1开启。

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 最大的生命周期60秒。

修改完sysctl -p

二、nginx的内置变量

nginx的内置变量:打印结果

$remote_addr 显示客户端的IP地址

添加多个直接在后面\n换行添加就行

$remote_addr 显示客户端的IP地址

$remote_port 显示客户端的端口号

$uri 显示请求的uri

$host 显示请求的主机名

$request_method 显示请求的方法

重要变量配置:

proxy_set_header X-Forwarded-for $remote_addr

代理服务器设置这个变量,客户端的真实ip要发送给后端,否则代理服务器会被拉入黑名单

proxy_set_header X-Real-IP $remote_addr

客户端到的真实ip,发送给后端,现在所有的网站都会要求客户端在请求的时候加上真实ip

总结:

1、nginx常用变量汇总:

nginx的内置变量:

$uri: 请求的URI,不包含主机和查询参数。

$request_uri: 请求的URI,包含主机和查询参数。

$args: 查询参数部分,即?后面的内容。

$query_string: 整个查询字符串,包含?。

$host: 请求的主机名。

$http_user_agent: 请求的User-Agent头信息,用于表示请求的客户端浏览器和操作系统。

$http_referer: 请求的Referer头信息,表示当前页面的来源URL。

$remote_addr: 客户端的IP地址。

$remote_port: 客户端的端口号。

$server_addr: 服务器的IP地址。

$server_port: 服务器的端口号。

$request_method: 请求的HTTP方法,如GET、POST、等。

$content_type: 请求的Content-Type头信息,表示请求体的MIME类型。

$content_length: 请求的Content-Length头信息,表示请求体的长度。

$scheme: 请求的协议,通常是http或https。

$request_filename: 请求的文件名,用于指定请求的实际文件路径。

$document_root: 当前请求的根目录。

$server_name: 服务器名称,用于匹配server块的server_name指令。

x_forwarded_for:用于获取HTTP请求头中的X-Forwarded-For字段的值。

X-Forwarded-For是一个常见的HTTP请求头,通常由代理服务器添加,用于指示原始客户端的IP地址。

proxy_set_header X-Forwarded-For $remote_addr; 这个是传给后端。

X-Real-IP:头部为客户端真实IP地址

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header指令来设置X-Real-IP头部的值为$remote_addr,即客户端的真实IP地址。

这样,Nginx会将客户端的真实IP地址作为X-Real-IP头部的值传递给后端服务器。

查看多个值\n

default_type text/plain; 表示如果没有在其他地方显式设置Content-Type头字段,

Nginx会将响应的MIME类型默认设置为text/plain,表示纯文本。

这样做的好处是,如果你的Nginx服务器上有许多文本文件(例如HTML、CSS、JavaScript等),

而这些文件的Content-Type并没有在具体的location块中设置,

那么Nginx会自动将它们设置为text/plain,这样浏览器就会正确解析和显示这些文本内容。

text/plain:纯文本类型,用于普通文本文件,如.txt文件。

text/html:HTML文档类型,用于网页文件,如.html文件。

text/css:CSS样式表类型,用于样式表文件,如.css文件。

text/javascript:JavaScript脚本类型,用于JavaScript文件,如.js文件。

 location / {

            root   html;

            index  index.html index.htm;

            default_type text/plain;

            return 200 "way:$request_method";

        }

三、nginx如何设置防盗链:

主要是防止其他网站盗用本站的图片。

若要不返回图片 直接在最后一行加上return 403;

 valid_referers none blocked *.test.com test.com;

        if ( $invalid_referer ) {

         rewrite ^/ http://www.test.com/error.png;

valid_referers:设置信任的网站:test.com、www.test.com、*test.com

none:允许没有http_refer的请求访问资源。就是请求URL里面可是不含refer,也就是可以不带URI

如访问www.test.com就等于访问www.test.com/111.jpg。不用带后面的uri

blocked:请求网站时,前面可以不带协议(http://)

后面的if语句:如果连接资源是来自上面valid_referer定义的信任列表,$valid_referer变为true,执行重定向

也就是说如果访问的是gif或jpg结尾的文件,就会跳转到www.test.com/error.png文件

然后去html里面改index.html:

接着去hosts文件配置域名映射:

接着开始配置第二台机器偷图机器:

先配置html中的index.html

两边都要配置hosts域名映射:

重启nginx之后去客户端虚拟机访问www.koeda.com

这里访问www.koeda.com就是访问/html下面的index.html

index.html中配置了直接跳转访问www.test.com/h.gif

<img src="http://www.test.com/h.gif"/>

</body>

</html>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值