架构师都会,lamp下的nginx的优化(从入门到高手的第五步)
Posted 遙遙背影暖暖流星
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了架构师都会,lamp下的nginx的优化(从入门到高手的第五步)相关的知识,希望对你有一定的参考价值。
继上篇,已经架构号了LNMP,现在我们要对nginx从安全和日常管理的上进行优化,包括修改版本号,防盗链和日志分割等
一,隐藏版本号
1、查看自己的nginx 的版本
curl -I http://192.168.100.7
或者游览器中登录后,F12常看查看网络
2、开始修改
方法一:修改配置文件隐藏班版本号
vim /usr/local/nginx/conf/nginx.conf
http {
include mime.types;
default_type application/octet-stream;
server_tokens off; #添加本行内容,关闭版本号
}
nginx -t #检测语法
systemctl restart nginx.service
二、修改源码文件,起欺骗作用
vim /usr/local/nginx/conf/nginx.conf
#define nginx_version 1015009
#define NGINX_VERSION "1.16.1" #键本号修改为1.16.1
#define NGINX_VER "apache/" NGINX_VERSION #服务名改成apache
重新编译安装nginx
cd /opt/nginx-1.15.9/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make && make install
vim /usr/local/nginx/conf/nginx.conf #改回之前的配置
http {
include mime.types;
default_type application/octet-stream;
server_tokens on; #打开
systemctl restart nginx.service
curl -I http://192.168.100.7
起到欺骗作用,避免有人企图利用版本漏洞而加以破坏
二、修改用户和组
一般情况下,我们会创建的用户名的nginx的用户去管理nginx,并在./configure 的时候指定以及对关键目录设置权限和属主和属组,但这样约定成俗的做法可能会被一些利用,进而去针对。
所以这个时候可以对进行修改
vim /usr/local/nginx/conf/nginx.conf
user nginx nginx; #将#去掉,nginx分别为用户和组,可以进行修改
三、配置nginx网页缓存时间
vim /usr/local/nginx/conf/nginx.conf #插入以下内容
location ~.*\\.(jpg|jepg|gif|css|png|ico|html)?$ { #图片识别
root html;
expires 1d; #缓存为1天
break;
}
cd /usr/local/nginx/html
上传图片到这个目录
vim index.html
<h1>Welcome to nginx!</h1>
<img src="sanshang.jpg"/> #第15行插入识别图片
systemctl restart nginx.service
登录192.168.100.7 或者192.168.100.7/sanshang.jpg
四、nginx 的日志切割
创建分隔的脚本
vim /opt/rizhifge.sh
#!/bin/bash
#Filename:fenge.sh``
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 -p $logs_path
mv /usr/local/nginx/logs/access.log ${logs_path}/test.com-access.log-$d
kill -HUP $(cat $pid_path)
find $logs_path -mtime +30 | xargs rm -rf
date -s 20210625 #今天日期为24号,日志要生成前一天的,所以这里修改一下时间为明天的日期 (修改回来ntpdate cn.pool.ntp.org)
chmod +x rizhifge.sh
./rizhifge.sh
systemctl restart nginx.service
ls /var/log/nginx
定时计划
crontab -e
0 1 * * * /opt/rizhifge.sh
五、 配置nginx实现连接超时
避免一个用户长时间登录无操作
vim /usr/local/nginx/conf/nginx.conf
http {
keepalive_timeout 100;
client_header_timeout 80; #等待客户端发送请求头的超时时间 超时会发送408错误
client_body_timeout 80; #设置客户端发送体请求超时时间
}
六、更改nginx 运行进程数
可以通过修改进程数来改变nginx的程序的性能
现在的进程数
●一般设为CPU的个数或者核数
●在高并发情况下可设置为CPU个数或者核数的2倍
●增加进程数,可减少了系统的开销,提升了服务速度
●使用ps aux查看运行进程数的变化情况
●默认情况,Nginx的多个进程可能跑在一个CPU上,可以分配不同的进程给不同的CPU处理,充分利用硬件多核多CPU
cpu核数为2的倍数;进程数为2的n次数,最多为cpu核数的两倍
vim /usr/local/nginx/conf/nginx.conf
worker_processes 2;
worker_cpu_affinity 0001 0010 0001 0010;
详细说明
###2核cpu,开启2个进程
worker_processes 4; #修改为核数相同或者2倍
worker_cpu_affinity 01 10 0100 1000;
#设置每个进程由不同cpu处理,进程数配为2时为0001、0010、0100、
PS:
01表示启用第一个CPU内核,10表示启用第二个CPU内核
worker_cpu_affinity 01 10;表示开启两个进程,第一个进程对应着第一个CPU内核,第二个进程对应着第二个CPU内核。
###2核cpu,开启4个进程
worker_processes 4;
worker_cpu_affinity 01 10 01 10;
PS:开启了四个进程,它们分别对应着开启2个CPU内核
###4个cpu,开启4个进程
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
ps:0001表示启用第一个CPU内核,0010表示启用第二个CPU内核,依此类推
nginx -t
systemctl restart nginx.service
ps -aux |gerp nginx
两个进程,负载均衡
七、配置nginx 实现网页压缩功能
1、设置配置文件
vim /usr/local/nginx/conf/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;
gzip on; #开启gzip压缩功能
gzip_min_length 1k; #压缩阈值
gzip_buffers 4 16k; #buffer 大小为4个16k缓冲区大小
gzip_http_version 1.1; #压缩版本(默认不设置)
gzip_comp_level 6; #压缩比率,最小为1,处理速度快,传输速度慢,9最大压缩比,处理速度慢,传输速度快(建议5-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条件,支持正则,表示ie6以下不启用gzip
gzip_vary on; #支持前端缓存服务器存储压缩页面
2、验证
nginx -t
systemctl restart nginx.service
清除游览器的缓存,登录
压缩格式出现
八、对FPM模块进行参数优化
nginx的PHP解析功能实现如果是交由FPM处理的,为了提高PHP的处理速度,可对FPM模块进行参数的调整根据服务器的内存与服务负载,
一、调整FPM模块参数
启动fpm进程方式,通过pm参数指定
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空闭进程数
三、FPM优化参数调整示例
●优化原因:服务器为云服务器,运行了个人论坛,内存为1.5G,fpm进程数为20,内存消耗近1G,处理比较慢
●优化参数调整
FPM启动时有5个进程,最小空闲2个进程,最大空闲8个进程,
最多可以有20个进程存在
vi php-fpm.conf
pid = run/php-fpm.pid
pm = dynamic
pm.max_children=20
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 8
九、防盗链
先利用另外一台主机尝试盗链
服务端:linux 192.168.100.7
盗链端:linux192.168.100
客户端:win7 192.168.100.4
1、 三台主机设置域名映射
vim /etc/hosts
192.168.100.7 www.cat.com
(属性-安全-管理-每个用户的每个权限都打过即可顺利保存)
2,对盗链断进行设置
首先确保盗链端安装了nginx
192.168.100.6
vim /usr/local/nginx/html/index.html #盗取www.cat.com的域名
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<img src="http://www.cat.com/sanshang.jpg"/>
注意图片名不要写错,否则识别不了
3,win7上访问盗链端
首先盗链端并无图片设置
如图到盗链成功
4、防盗链设置
vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.cat.com; #修改为www.cat.com
location ~*\\.(jpg|gif|swf)$ {
valid_referers none blocked *.cat.com cat.com; #只允许来源为本地的访问源进行访问
if ( $invalid_referer ) {
rewrite ^/ http://www.cat.com/error.jpg; #选定图片
}
}
并将名为error.jpg图片上传至/usr/local/nginx/html/
systemctl restart nginx.service
以上是关于架构师都会,lamp下的nginx的优化(从入门到高手的第五步)的主要内容,如果未能解决你的问题,请参考以下文章