文章目录
nginx优化
1 隐藏版本号
访问网页可以按F12查看网络栏中的服务应用及版本号的信息,而nginx每个版本都有相对的漏洞,如果暴露服务应用和版本号会有被攻击的风险,所以需要隐藏版本号。

1.1 方法一
vim /usr/local/nginx/conf/nginx.conf
server_tokens off;
# server_tokens off; 通用方法编译,apt yum都可以使用
# 只是隐藏版本,服务名称还在
1.2 方法二:修改源码文件(仅限于编译安装)
vim /opt/nginx-1.22.0/src/core/nginx.h
# 修改完后重新编译安装
vim /usr/local/nginx/conf/nginx.conf
server_tokens on; # 在配置文件中添加
systemctl restart nginx

2 nginx日志分割(shell脚本)
d=$(date +%Y-%m-%d)
# 直接获取当前的日期
dir="/usr/local/nginx/logs"
# 获取日志目录所在的位置
logs_access='/usr/local/nginx/logs/access.log'
logs_error='/usr/local/nginx/logs/error.log'
# 定义需要分割的日志分件
pid_file='/usr/local/nginx/run/nginx.pid'
# 定义pid分件的位置
if [ ! -d "$dir" ]
then
mkdir -p $dir
fi
mv ${logs_access} ${dir}/access_${d}.log
# mv /usr/local/nginx/logs/access.log /usr/local/nginx/logs/access_2024-12-09.log
mv ${logs_error} ${dir}/error_${d}.log
# mv /usr/local/nginx/logs/error.log /usr/local/nginx/logs/error_2024-12-09.log
kill -USR1 $(cat ${pid_file})
# -USR1,通过发送USR1这个信号,给nginx的主进程,让nginx重新生成access.log和error.log
# 日志清理,清理30天以前的日志
find $dir -mtime +30 -exec rm -rf {} \;
3 nginx的页面压缩
作用:对文件进行压缩的功能,节约带宽,提高访问速度
条件:nginx需要配置http_gzip_module模块


4 keepalive_timeout
http1.1之后特有的模式,keepalive模式,主流的前端软件都支持keepalive。
连接保持:数据传送完毕之后,连接不是立刻断开。而是一段时间之内保持连接,无需再进行三次握手。如果需要传输数据,可以继续使用这个连接。连接保持的时间不宜太长,一般在60-180秒,keepalive的连接保持时间太长,会占用过多的系统资源,影响性能。
会话保持:和服务端建立连接之后,在一定时间保持登录或者固定的状态,保证在浏览时,数据一致。
区别:
-
连接保持是关于连接的控制,主要是为了减少频繁建立和关闭连接的开销,提高通信效率。
-
会话保持是关于交互的控制,主要是为了确保客户端与服务器之间的交互过程能够连续进行。
-
client_header_timeout 80;
客户端向服务端发送一个完整请求头的超时时间,nginx就返回408
-
client_body_timeout 80;
客户端和服务端建立连接之后,没有在规定时间内发送一个完整的请求体,或者没有请求任何内容,nginx也会返回408
-
5 nginx的并发处理
vim /usr/local/nginx/conf/nginx.conf
worker_processes 4;
# 修改为内核数量的2倍或者一致。一般设置4个 不能超过8个,超过8个性能反而会降低。
worker_cpu_affinity 0001 0010 0100 1000;
或
worker_cpu_affinity 1 10 100 1000;
# 将nginx的进程绑定到cpu的核心,防止cpu之间的切换,提高性能。
cat /proc/cpuinfo
或
top 按1键
# 查看cpu个数
worker_connections 1024;
# 并发处理数 = worker_processes * worker_connections
# 仅修改这两项设置无效,因为受到系统资源配置的限制
vim /etc/security/limits.conf
# /etc/security/limits.conf:系统资源限制配置文件
#在文件最后添加以下内容,修改资源配置上限
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
#*表示任意程序,nproc: 系统处理的进程数 nofile: 同时打开文件的数量,最大就是65535,必须重启服务器生效
ulimit -n 65535

6 timewait回收机制
timewait是tcp连接当中的一种正常状态。在timewait状态下,tcp连接处于等待阶段,等待一个持续的时间,确保双方的数据尽可能的传输完毕。
timewait的两个目的:
1、确保连接时被可靠的关闭,即便是四次挥手之后,对方有可能还有数据未处理完毕,在timewait阶段可以保证数据依然被正确的处理,防止旧的数据包影响其他新的连接。
2、避免出现连接复用的问题:如果timewait不存在,或者时间较短,旧的连接可能依然处于网络之中,有可能被认为新的连接。
当服务器上同时有大量的短连接频繁的创建和销毁,或者处理大量并发连接时,time_wait就会出现堆积。
如果堆积的数量太多,需要系统能够尽快地把timewait回收。
vim /etc/sysctl.conf
# /etc/sysctl.conf:修改内核配置的文件
sysctl -p
# 修改完配置文件,刷新命令

-
net.ipv4.tcp_tw_recycle=1(已经被淘汰)原因:在NAT(地址转换)环境中,会加速系统收回timewait,在nat环境中,源地址会发生变化,他总是基于源ip地址进行识别,多个客户端使用一个相同的外部ip地址时,连接混淆的情况,导致客户端无法正确连接。
-
fin-wait-1:终止等待1,表示应用程序已经发送了连接关闭的请求,正在等待另一端的确认 -
fin-wait-2:终止等待2,表示已收到另一端已经确认连接关闭的响应,正在等待另一端发送连接关闭的请求
7 配置防盗链
作用:防止别的用户通过链接的方式盗用网站的图片
vim /usr/local/nginx/conf/nginx.conf
location / {
root html;
index index.html index.htm;
}
location ~* \.(jpg|gif|swf)$ {
root html;
valid_referers none blocked *.kc02.com kc02.com;
if ($invalid_referer) {
rewrite ^/ http://www.kc02.com/error.png;
# 通常直接写 return 403;
}
systemctl restart nginx.service

valid_referers:设置信任的网站可以正常的使用图片none:允许没有http_refer的请求,例如 www.xy104.com/s.jpg = www.xy104.comblocked:允许不是http://开头的请求,例如 http://www.baidu.com 和 www.baidu.comif ($invalid_referer):不是信任的网站的地址,就是认为是真,执行rewrite重定向访问:http://www.xy104/com/error.png
vim /etc/hosts
# 两台服务器都修改
192.168.159.200 www.kc01.com
192.168.159.220 www.kc03.com

vim /usr/local/nginx/html/index.html
# 源服务器作如下修改
<html>
<body>
<img src="ctrl.jpg"/>
</body>
</html>
vim /usr/local/nginx/html/index.html
# 盗图服务器作如下修改
<html>
<body>
<img src="www.kc03.com/ctrl.jpg"/>
</body>
</html>
8 location匹配的规则和优先级
8.1 location匹配的分类
多个location一旦匹配其中之一,不再匹配其他location
-
精确匹配
location = / {...}=:完全相同,一个字错都匹配不到 -
正则匹配
location ~ / {...}^~:表示普通字符的前缀匹配,如果匹配成功,不再匹配其他的location~:区分大小写的字符匹配~*:不区分大小写进行匹配!~:区分大小写,匹配取非!~*:不区分大小写,匹配取非
-
一般匹配
location /
8.2 location匹配的优先级
location = > location ^~ > location ~* > location /test1 > location /
8.3 网站配置location的规则怎么做
1、精确匹配网站的根目录,也就是网站的首页。首页一般都是一个静态的页面,精确匹配可以提高访问速度
location = /
2、处理静态文件的请求,通过前缀或者是后缀进行配的规则
location ^~ /static {}
location ~* .(jsp|gif|png|jsp|html|php)$ {}
3、通用匹配:一般用来转发包含.php或者.jsp为结尾的动态请求
location /
proxy_pass http://
4254




被折叠的 条评论
为什么被折叠?



