1.隐藏版本号
为什么隐藏版本号 | 因为nginx Bug多,更新版本速度比较快,所以一旦版本号暴露出去,有可能给对方提供攻击漏洞 |
1 | vim /usr/local/nginx/conf/nginx.conf 在http大模块(http全局模块)中修改,不在server中,也不是location 输入 Server_tokens off; |
2 | 修改源码文件,重新编译安装 源码包里面,修改配置文件 修改完之后要重新配置,编译和安装 隐藏版本号 进入源码包解压文件中有个src 里面有个core ,打开 nginx.h 文件13到14行 |
第一种方式
vim /usr/local/nginx/conf/nginx.conf
http {
include mime.types;
default_type application/octet-stream;
server_tokens off;
#在20行,添加隐藏版本号
第二种方式
#在安装包里修改配置文件后,需要重新编译软件,之后到nginx.conf里面把隐藏版本号功能关闭(也可以打开)
[root@c1 core]# vim /opt/nginx-1.22.0/src/core/nginx.h
define NGINX_VERSION "1.22.0"
define NGINX_VER "nginx/" NGINX_VERSION
#在13行和14行修改版本号,"1.22.0" "nginx/" 可自定义
wq!
[root@c1 src]# cd /opt/nginx-1.22.0
./configure --prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module
make && make install
2.nginx 日志分割
Nginx没有自带的日志分割功能,靠运维人员通过脚本实现日志分割,结合定时任务进行操作,日志脚本一定要给权限,不然会报错。 0 1 * * * /opt/nginxlog.sh #脚本文件放在哪,路径就写哪 |
#!/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.网页压缩
http_gzip_staic_module 可以对文件内容和图片进行压缩的功能,节约宽带,提升用户的访问速度 |
vim /usr/local/nginx/conf/nginx.conf
gzip on;
#33行把 gzip on 的注释取消掉
gzip_min_length 1k;
#如果文件的大小是1K,那么不再进行压缩处理
gzip_comp_level 6;
#压缩级别或者叫压缩比率 1-9 ,1是速度最快,压缩比最低,9压缩的速度最慢,但是压缩比最高,默认是1
gzip_vary on;
#支持前段的缓存也可以压缩
gzip_types text/plain image/jpg
#以下为可以支持的格式类型
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; 要以分号结尾
将图片放到 /usr/local/nginx/html中 |
压缩
4.nginx的图片缓存时间
可以在日后访问时,不需要经常的向后台请求数据,加快访问速度,一般针对静态页面,动态页面不设置缓存时间 |
vim /usr/local/nginx/conf/nginx.conf
Location ~* \.(gif|jpg|jepg|bmp|ico)$ {
root html;
expires 1d;
}
#支持的格式root表示拼接,html表示以html结尾,expires表示设置缓存时间,1d表示一天,一般都设置一天
wq!
没改之前缓存时间
86400 就是1天
5.连接超时
Keepalive_timeout 65;
#30行,设置超时时间一般在60秒到120秒左右
client_header_timeout 80;
#客户端向服务端发送一个完整的request(请求),header(头)的超时时间,如果客户端在80秒内没有发送一个完整的请求头,那么nginx将会返回408,也就是request timeout(请求超时)
client_body_timeout 80;
#客户端与服务端建立连接之后发送request body(请求体)的超时时间,80秒内客户端没有发送任何内容,nginx 就会发送408 request time out (请求超时)。
6.nginx并发设置
在高并发的场景下,需要nginx启动更多的进程来保证快速响应 根据cpu的核心数,调整nginx工作进程 查询cpu核数有几个,这是有上限的,最多不要超过8个 ,worker_processes 8; 8个以上不会有性能提升,反而会降低稳定性 ,生产中设4个足够了 一个核可以支持1w5,4个核可以支持6w个并发 |
work_connections 15000; ,别忘了修改 limits.conf
Cat /proc/cpuinfo |grep processor | wc -l
Cat /proc/cpuinfo | grep -c processor
8个以上性能降低:会不停切换导致效率降低
怎么绑定cpu
Worker_processes 4
要记得修改limits.conf
#全局配置
Events {
Worker_connections 1024;
Worker_cpu_affinity 0001 0010 0100 1000;
# 要和上面保持一致,几个核就写几个
#把进程绑定cpu上,减少cup之间的切换,提高效率
}
面试题
TIME_WAIT 大量出现 如何优化
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' (模拟tinme_wait)
Time_wait是tcp连接的状态中的一种,不是报错!,出现在四次挥手之后
在time_wait状态下,tcp处于连接等待状态,等待有一个持续时间http1.1会话保持
- 确保可靠的关闭连接
- 避免连接复用,
他在连接正常关闭之后,一段时间之后,他会自动消失,而且占用的资源很少,对服务器性能的影响有限。
如需快速取消time_wait
需要改配置文件:vim /etc/sysctl.conf
nginx的常用内置变量 打印结果
$remote_addr : 显示客户端的ip地址
$remote_port :显示客户端的端口号
$uri: 显示请求的uri
$host: 显示请求的主机名
$request_metthod:显示请求的方法
重要的变量配置
Proxy_set_header X-Forwarded-for $remote_addr
代理服务器设置这个变量,客户端的真实要发给后端,否则代理服务器地址会被拉入黑名单
Proxy_set_header X-Real-IP $remote_addr
客户端的真实ip,发送给后端,现在所有的网站都是要求客户端请求时加上真实ip.
微信,微博,B站,都会显示ip地址
防盗链
防止其他网站盗用本站的图片
Valid_referers none blocked *.kgc.com kgc.com;
If ( $vailid_referer ) {
Rewrite ^/ http://www.kgc.com/error.png;
Valid_referers: 设置信任的网站
Kgc.com www.kgc.com
None:允许没有http_refer的请求访问资源,请求url里面可以不包含refer,不带url
www.Kgc.com = www.kgc. com/error.png;
Blocked:请求我那个展示,前面可以不带协议
valid_referers none blocked *.kgc.com kgc.com;
if ( $invalid_referer ) {
rewrite ^/ http://www.kgc.com/error.png;
}