目录
一、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的会话保持
作用:
- 确保可靠的关闭连接
- 避免连接复用
他在连接正常关闭之后,一段时间之后他会自动消失。而且占用的资源很少,对服务器性能的影响是有限的。
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>