Nginx优化服务
nginx隐藏版本号
直接隐藏版本号
- 隐藏版本号可以避免安全漏洞的泄露、防止黑客攻击
-
修改nginx.conf配置文件
vi /etc/nginx.conf server_tokens off;
-
重启nginx
killall -3 nginx nginx
- 此时可以看到nginx,但是后面的版本号已经看不到了
修改网页服务来隐藏版本号
-
修改配置
vi /etc/nginx.conf server_tokens on;
-
修改nginx.h文件
vi nginx-1.12.2/src/core/nginx.h #define nginx_version 1002001 #define NGINX_VERSION "1.2.2" #define NGINX_VER "IIS/" NGINX_VERSION
-
编译安装并重启
killall -3 nginx
cd nginx-1.12.2/
make && make install
nginx
- 抓包查看结果
修改Nginx用户和组
Nginx运行时进程需要有用户与组的支持,以实现对网站文件付出时进行访问控制
Nginx默认使用nobady用户账号与组帐号
-
查看nginx运行账户
ps aux | grep nginx
-
创建一个不可登陆账户给ngxin使用,安装依赖包
useradd -M -s /sbin/nologin nginx cd nginx-1.12.2/ ./configure \ --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ vi /etc/nginx.conf user nginx nginx;
-
重启nginx
killall -3 nginx nginx
Nginx网页缓存时间
-
未设置缓存时间的
-
修改配置文件
当Nginx将网页数据返回给客户端后,可设置缓存的空间,以方便在日后进行相同内容的请求时直接返回,面重复请求,加快了访问速度,但是仅仅针对静态网页进行设置,动态网页不设置缓存时间
-
修改nginx.conf
vi /etc/nginx.conf location ~ \.(gif|jpg|jped|png|bmp|ico)$ { root html; expires 1d; }
-
添加图片,并在浏览器验证
cd /usr/local/nginx/html ls -lh vi index.html <img src="time.jpg" />
- 重启服务,查看缓存时间
2.加入过期参数
设置方法
修改在配置文件,在http段、或者server段、或者location段加入对特定内容的过期参数
vi /etc/nginx.conf
expires 1d;
- 重启查看效果
Nginx日志切割
- 随着Nginx运行时间增加,日志也会增加。为了方便掌握Nginx运行窗台,需要关注Nginx日志文件
- 太大的日志文件对监控是一个大灾难
- Nginx自身不具备日志分割处理的功能,但是可以通过Nginx信号控制功能的脚本实现日志的自动切割
- 通过Linux的计划任务周期性的进行日志分割
-
实现Nginx日志切割的步骤
1.设置时间变量
2.设置保存日志路径
3.将目前的日志文件进行重命名
4.重建新日志文件
5.删除时间过长的日志文件
6.设置cron任务,定期执行脚本自动进行日志分割 -
获取日期
date "+%Y%m%d" 当天日期 date -d "-1 day" "+%Y%m%d" 昨天日期 date -d "+1 day" "+%Y%m%d" 明天日期
-
nginx日志文件路径
cd /usr/local/nginx/logs/
-
编写脚本
vim fenge.sh #!/bin/bash #日志分割 d=$(date -d "-1 day" "+%Y-%m-%d") logs_path="/var/log/nginx" pid_path="/usr/local/nginx/logs/nginx.pid" [ -d $logs_path ] || mkdir $logs_path mv /usr/local/nginx/logs/test.com.access.log ${logs_path}/giao.com.access.log-$d kill -HUP $(cat $pid_path) find $logs_path -mtime +60 | xargs rm -rf
-
给脚本执行权限
cd /usr/local/nginx/logs/ chmod +x access.log cd chmod +x fenge.sh ./fenge.sh
-
日志分割后路径
cd /var/log/nginx/
-
执行脚本测试
cat giao.com.access.log-20201130
- 设置任务计划
查看sh脚本的绝对路径
which sh
crontab -e
crontab -l
配置Nginx连接超时
为避免同以客户端长时间占用连接,造成资源浪费,可以设置相应的连接超时参数,实现控制连接访问时间
超时参数
参数 | 作用 |
---|---|
Keepalive_timeout | 设置连接保持超时时间 |
Cient_header_timeout | 指定等待客户端发送请求头的超时时间 |
Client_body_timeout | 设置请求体读取超时时间 |
-
编辑配置文件
vi /etc/nginx.conf keepalive_timeout 65 180; client_header_timeout 80; client_body_timeout 80;
- 重启查看浏览器
更改Nginx运行进程数
在高并发场景,需要启动更多的Nginx进程以保证快速响应,以处理用户的请求,避免造成阻塞
-
更改进程数的配置方法
修改配置文件 ,修改进程配置参数 -
修改配置文件的work_processes参数
*一般设为CPU的个数或者核数
*在高并发情况下可设置为CPU个数或者核数的2倍 -
增加进程数,可减少系统开销,提升服务速度
-
查看CPU核心数,查看进程
cat /proc/cpuinfo | grep -c "physical" ps -aux | grep nginx
-
修改配置
worker_processes 8; worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000; use epoll; worker_connections 4096;
-
语法检查,重启,查看
ulimit -n 65535 >> /etc/rc.local nginx -t killall -3 nginx nginx ps -aux | grep nginx
Nginx网页压缩功能
- Nginx的ngx_http_gzip_module压缩模块提供对文件内容的压缩功能
- 允许Nginx服务器将输出内容在发送客户端之前进行压缩,以节约网站带宽,提升用户的访问体检,默认以安装
- 可在配置文件中加入相应的压缩功能参数对压缩性能进行优化
参数 | 压缩功能 |
---|---|
gizp on | 开启gzip压缩输出 |
gzip_min_length 1k | 设置允许压缩的页面最小字节数 |
gzip_buffers 4 16k | 申请4个单位为16k的内存作为压缩结果流缓存,默认值时申请与原始数据大小相同内存空间来存储gzip压结果 |
gzip_http_version 1.0 | 设置识别http协议版本,默认是1.1,目前大部分浏览器已经支持gzip解压,但处理较慢,也比较消耗服务器CPU资源 |
gzip_comp_level 2 | 指定gzip压缩比,1压缩比最小,处理最快9压缩比最大,传输读速块,但是处理速度慢 |
gzip_types text/plain | 压缩类型,对那些网页文档启用压缩功能 |
gzip_vary on | 让钱多缓存服务器缓存经过gzip压缩的页面 |
- 配置文件
vi /etc/nginx.conf
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 6;
gzip_types text/plain application/x-javascript text/css image/jpg image/jpeg image/png image/gif application/xml text/javascript application/x-httpd-php application/javascript application/json;
gzip_disable "MSIE [1-6]\.";
gzip_vary on;
- 重启服务,在浏览器上
Nginx防盗链
-
在企业网站服务中,一般都要配置防盗链功能,以避免网站内容被非法盗用,造成经济损失。
-
Nginx防盗链功能也非常强大。默认情况下,只需要进行简单的配置,即可实现防盗链处理。
-
修改配置
vi /etc/nginx.conf location ~* \.(jpg|gif|swf)$ { valid_referers none blocked *.giao.com giao.com 20.0.0.10; if ($invalid_referer ) { rewrite ^/ http://www.giao.com/error.png; } }
-
在另一台设备上安装http或是nginx去盗用图片测试
到网站根目录编辑index.html文件vi /usr/local/nginx/html/index.html <img src="http://20.0.0.10/time.jpg"/> vi /etc/hosts 20.0.0.10 www.giao.com
防盗链未开启
防盗链开启
FPM模块优化
-
Nginx的PHP解析功能实现如果是交由FPM处理的,为了提高PHP的处理速度,可以根据服务器的内存与服务器负载对FPM模块进行参数的调整
static:将产生固定数量的fpm进程
dynamic: 将以动态的方式产生fpm进程 -
FPM优化参数
Static的方式参数
pm.max_children:指定启动的进程数量 -
dynamic的方式参数
参数 | 作用 |
---|---|
pm.max_children | 指定启动的进程的最大值 |
pm.start_servers | 动态方式下启动的fpm进程数 |
pm.min_spare_servers | 动态方式下最小的fpm空闭进程数 |
pm.max_spare_servers | 动态方式下最大的fpm空闭进程数 |
netstat -anpt | grep 9000
/usr/local/php/sbin/php-fpm
cd /usr/local/php/etc/php-fpm.d/
vi www.conf
刚才修改的参数只有进程号可以直观的看出来,所以通过查看进程号来判断是否修改成功
查看php-fpm进程
ps aux | grep php-fpm
动态方式下启动的fpm进程数为2