Nginx 优化
一、Nginx 隐藏版本号
当Nginx的版本号不隐藏时,访问网站会显示 Nginx的版本号,从而会增加一定的风险
1. 访问网站查看版本号
2. 隐藏方法
(1)备份配置文件
cd /usr/local/nginx/conf/
cp nginx.conf nginx.conf.bak
(2)修改配置文件
vim /usr/local/nginx/nginx.conf
http {
include mime.types;
default_type application/octet-stream;
# 隐藏版本号
server_tokens off;
:wq!
# 重启 Nginx 服务
systemctl restart nginx
3. 刷新网页
版本号被隐藏
二、Nginx 更改版本号
1. 修改 Nginx 源码文件
cd /opt/nginx-1.22.0/src/core/
vim nginx.h
# 更改为自定义版本号
#define NGINX_VERSION "abc"
:wq!
2. 重新编译安装
# 指定重新安装路径及模块
cd /opt/nginx-1.22.0/
[root@www nginx-1.22.0]#
./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-http_stub_status_module \
> --with-http_ssl_module
# 编译与安装
make -j 6 && make install
3. 将隐藏版本号设置打开
vim /usr/local/nginx/conf/nginx.conf
http {
include mime.types;
default_type application/octet-stream;
# 打开版本号设置
server_tokens on;
:wq!
# 重启 Nginx 服务
systemctl restart nginx
4. 刷新网页
版本号隐藏成功
三、Nginx 日志分割
Nginx本身不带日志分割工具,所以在工作中,所有的nginx的日志分割都是以shell脚本的形式来实现的
1. 编写shell脚本
cd /opt
[root@www opt]#
vim nginxlog.sh
#!/bin/bash
# 获取当前日期
d=$(date +%Y-%m-%d)
# 定义存储目录
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/logs/nginx.pid"
if [ ! -d $dir ]
then
mkdir $dir
fi
# 移动日志文件access error,重命名
mv ${logs_file} ${dir}/access_${d}.log
mv ${logs_error} ${dir}/error_${d}.log
# 发送信号,给nginx主程序,让nginx生成新的日志文件
kill -USR1 $(cat ${pid_file})
# 日志文件清理,将30天前的日志文件直接清除
find ${dir} -mtime +30 -exec rm -rf {} \;
2. 运行脚本
./nginxlog.sh
3. 创建定时任务
crontab -e -u root
0 0 1 * * /opt/nginxlog.sh
:wq!
四、Nginx 压缩页面
压缩目的时为了节约宽带,提高访问速度
ngx_http_gzip_module 压缩模块所提供的功能,默认是注释掉的,也就是不压缩,需要人工指定
gzip_min_length 1k; 最小的压缩文件,小与1K就不再压缩了
gzip buffers 4 64k; 压缩的缓冲区,4个64K缓冲区
gzip _http_version 1.1; 压缩版本,默认1.1
gzip_comp_level 6; 压缩级别1-9,6(正好)
gzip_vary on; 支持前端缓存服务器的压缩功能打开
gzip_types textplain text/javascript application/x-javascript text/css text/xml application/xml applicationt/xmI+rss image/jpg image/jpeg image/png image/gif application/x-httpd-php application/javascript application/json;
支持压缩的类型
1. 更改配置文件
gzip on;
gzip_min_length 1k;
gzip_buffers 4 64k;
gzip_http_version 1.1;
gzip_comp_level 6;
gzip_vary on;
gzip_types textplain text/javascript application/x-javascript text/css text/xml application/xml applicationt/xmI+rss image/jpg image/jpeg image/png image/gif application/x-httpd-php application/javascript application/json;
:wq!
# 检验配置文件是否有错误
nginx -t
# 重启Nginx服务
systemctl restart nginx
2. 清空浏览器缓存重新访问
五、Nginx 图片缓存
避免重复访问,导致访问速度变慢,加快访问的时间
针对静态页面,动态不设置缓存时间的
1. 编辑Nginx配置文件
vim /usr/local/nginx/conf/nginx.conf
location ~* \.(gif|jpg|jepg|bmp|ico)$ {
root html;
expires 1d;
}
:wq!
# 重启 nginx 服务
systemctl restart nginx
2. 浏览器访问图片
第一次访问
第二次访问
六、Nginx 连接超时
http:keepalive模式,keepalive 缓存记录时间
web服务器处理完一个请求之后,保持tcp连接,接受到同样的客户端的其他请求时,web服务器就会利用这个未关闭的连接,继续提供相应服务,不需要再新建连接了
keepalive:在一段时间之内保持打开状态,它会占用资源,占用过多资源,影响整体性能
keepalive_timeout 65; 指定的tcp连接,最多只能保持65秒,65秒之后,服务就会关闭连接
nginx默认是65秒,一般浏览器都是60秒
设为0,nginx就不会再发送包含keepalive的相应头
client_header_timeout 60; 请求头的超时时间
没有60秒内发送完整的请求头,nginx返回408 请求超时
client_body_timeout 60; 请求体超时
没有在60秒,向web服务器请求,发送任何内容,nginx 408 请求超时
1. 编辑Nginx配置文件
vim /usr/local/nginx/conf/nginx.conf
keepalive_timeout 60 180;
client_header_timeout 60;
client_body_timeout 60;
2. 浏览器访问
七、Nginx 更改进程数
在高并发场景,需要启动更多的Nginx进程以保证快速响应,以处理用户的请求,避免造成阻塞
vim /usr/lcoal/nginx/conf/nginx.conf
# 进程数为核数或是核数的2倍
worker_processes 2;
# 指定每个进程使用的cpu
worker_cpu_affinity 01 10;
八、Nginx 配置防盗链
1. 添加访问的图片
# 被盗链服务器 www.TServer.com
echo "192.168.23.10 www.TServer.com" >> /etc/hosts
echo "192.168.23.15 www.FServer.com" >> /etc/hosts
vim /usr/local/nginx/html/index.html
<html>
<body>
<img src="test.jpg"/>
</body>
</html>
:wq!
# 盗链服务器 www.FServer.com
echo "192.168.23.10 www.TServer.com" >> /etc/hosts
echo "192.168.23.15 www.FServer.com" >> /etc/hosts
vim /usr/local/nginx/html/index.html
<html>
<body>
<img src="http://www.TServer.com/test.jpg"/>
</body>
</html>
:wq!
用盗链服务器的浏览器访问两台服务器
都可以访问
2. 配置防盗链
vim /usr/local/nginx/conf/nginx.conf
http {
......
server {
......
location ~* \.(jpg|gif|swf)$ {
valid_referers none blocked *.TServer.com TServer.com;
if ( $invalid_referer ) {
rewrite ^/ http://www.TServer.com/error.png;
#return 403;
}
}
......
}
}
盗链服务器浏览器访问两台服务器
九、总结
当配置Nginx服务时,可以用上面几种优化方法,来使Nginx服务稳定安全的运行。