Nginx网页优化
和Apache优化类似
Nginx隐藏版本号
修改配置
curl -I http://20.0.0.10
vi /etc/nginx.conf
http {
include mime.types;
default_type application/octet-stream;
server_tokens off; ##关闭版本号
systemctl stop nginx
systemctl start nginx
curl -I http://20.0.0.10
修改源码
删除server_tokens off
vi nginx-1.12.2/src/core/nginx.h
#define nginx_version 1010000 --修改发行时间
#define NGINX_VERSION "1.1.2" --修改版本号
#define NGINX_VER "IIS/" NGINX_VERSION --修改软件
systemctl stop nginx
cd nginx-1.12.2
make && make install
systemctl start nginx
curl -I http://20.0.0.10
Nginx用户与组
Nginx运行时进程需要有用户与组的支持,以实现对网站文件读取时进行访问控制,Nginx默认使用nobody用户账号与组账号。
修改的方法:
编译安装时指定用户与组
修改配置文件指定用户与组
编译安装时指定
创建用户账号与组账号,如nginx。
编译安装时–user与–group指定Nginx服务的运行用户与组账号
cd nginx-1.12.2/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
修改配置文件法指定
vi /etc/nginx.conf
修改 user nginx nginx;
systemctl stop nginx
systemctl start nginx
ps aux | grep nginx
Nginx网页缓存时间
vi index.html
<img src="c.jpg" />
vi /etc/nginx.conf
location ~\.(gif|jpg|jepg|pngico)$ {
root html;
expires 1h;
}
访问20.0.0.10,进行抓包
注:效果出不来,清除网页缓存。
Nginx的日志切割
思路
设置时间变量
设置保存日志路径
将目前的日志文件进行重命名
重建新日志文件
删除时间过长的日志文件
设置cron任务,定期执行脚本自动进行日志分割
流程
vim fg.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 -p $logs_path #-d:条件判断,目录是否存在,没有创建
mv /usr/local/nginx/logs/access.log ${logs_path}/aa.com.access.log-$d
kill -HUP $(cat $pid_path) #当服务重新加载后,会重新生成一个新的日志文件,以便后续的日志分割操作
find $logs_path -mtime +60 | xargs rm -rf #找到超过60天的日志进行删除
chmod +x fg.sh
cd /usr/local/nginx/logs/
chmod +x access.log
cd
./fg.sh
cd /usr/local/nginx/
[root@server nginx]# ll
crontab -e #编写任务计划
0 1 * * * /usr/bin/sh /root/fenge.sh
#* * * * *
#分钟 小时 日期 月份 星期
crontab -l #查看任务计划
Nginx实现连接超时
为避免同一客户端长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间。
参数
Keepalive_ timeout:
设置连接保持超时时间
Client header timeout:
指定等待客户端发送请求头的超时时间
Client body_ _timeout:
设置请求体读超时时间
流程
vi /etc/nginx.conf
添加修改
keepalive_timeout 65 180; #前面参数是服务器主动关闭的超时时间(默认是65秒),后面参数是客户机浏览器主动关闭的时间
client_header_timeout 80; #等待客户端发送请求头的超时时间超时会发送408错误
client_body_timeout 80; #设置客户端发送请求体超时时间
nginx -t
systemctl stop nginx
systemctl start nginx
访问http://20.0.0.10,抓包。
Nginx运行进程数
概述
在高并发场景,需要启动更多的Nginx进程以保证快速响应,以处理用户的请求,避免造成阻塞。
一般设为CPU的个数或者核数。在高并发情况下可设置为CPU个数或者核数的2倍。增加进程数,可减少了系统的开销,提升了服务速度。使用ps aux查看运行进程数的变化情况。默认情况,Nginx的多 个进程可能跑在一个CPU上,可以分配不同的进程给不同的CPU处理,充分利用硬件多核多CPU。
方法
修改配置文件,修改进程配置参数
cat /proc/cpuinfo | grep -c "physical"
vi /etc/nginx.conf
添加修改
worker_processes 8; #工作进程
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000; #CPU或者核的分配情况
use epoll;
worker_connections 4096; #单个并发连接数进行修改
nginx -t
systemctl stop nginx
systemctl start nginx
ps aux | grep nginx 查看状态
Nginx实现网页压缩功能
概述
Nginx的ngx_http_gzip_module压缩模块提供对文件内容压缩的功能。允许Nginx服务器将输出内容在发送客户端之前进行压缩,以节省网站带宽,提升用户的访问体验,默认已经安装。可在配置文件中加入相应的压缩功能参数对压缩性能进行优化。
参数
压缩参数 | 说明 |
---|---|
gzip 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压缩功能
gzip_min_length 1k; #压缩阀值
gzip_buffers 4 16k; #buffer大小为4个16k缓存区大小
gzip_http_version 1.1; #压缩版本
gzip_comp_level 6; #压缩比率,最小为1,处理速度快,传输速度慢,9最大压缩比,处理速度慢,传输速度快
gzip_types text/plain text/css text/javascript application/x-javascript application/javascript application/json application/x-httpd-php application/xml image/jpg image/jpeg image/gif image/png;
gzip_disable "MSIE [1-6]\."; #配置禁用gzip条件,支持正则,表示ie6以下不启用gzip
gzip_vary on; #选择支持very header可以让前端的缓存服务器缓存经过gzip压缩的页面
nginx -t
systemctl stop nginx
systemctl start nginx
访问20.0.0.10,抓包。
Nginx实现防盗链
概述
在企业网站服务中,一般都要配置防盗链功能,以避免网站内容被非法盗用,造成经济损失。Nginx防盗链功能也非常强大。默认情况下,只需要进行简单的配置,即可实现防盗链处理。
配置说明
~* .(jipglgif|swf) $ :匹配以.jpg或gif或.swf结尾的不区分大小写的文件。
valid_ referers: 设置信任的网站,即能弓|用相应图片的网站。
网址或者域名: referer中包含相关字符串的网址。
i语句:如果链接的来源域名不在valid_ referers所列出的列表中,$invalid_ referer为1, 则执行后面的操作,即进行重写或返回403页面。
流程
IP | 用途 |
---|---|
20.0.0.10 | 源主机 |
20.0.0.12 | 盗链网站 |
盗链
yum -y install httpd
vi /var/www/html/index.html
<html><body>Welcome!<img src="http://20.0.0.10/c.jpg"/></body></html>
systemctl stop firewalld
setenforce 0
systemctl start httpd
访问20.0.0.12
源主机
在 /usr/local/nginx/html/目录下,添加error.png图片。
vi /etc/nginx.conf
添加
location ~* \.(jpg|gif|swf)$ {
valid_referers none blocked *.aa.com aa.com 20.0.0.10;
if ($invalid_referer) {
rewrite ^/ http://20.0.0.10/error.png;
}
}
nginx -t
systemctl stop nginx
systemctl start nginx
访问20.0.0.12
对FPM模块进行参数优化
概述
Nginx的PHP解析功能实现如果是交由FPM处理的,为了 提高PHP的处理速度, 可对FPM模块进行参数的调整根据服务器的内存与服务负载,调整FPM模块参数。
FPM优化参数
Static的方式的参数:
pm.max_ children: 指定启动的进程数量
Dynamic方式的参数:
pm.max_ children: 指定启动进程数的最大值
pm.start servers: 动态方式下初始的fpm进程数
pm.min_ spare_ servers: 动态方式下最小的fpm空闲进程数
pm.max_ spare_ servers: 动态方式下最大的fpm空闲进程数
流程
vi /usr/local/php/etc/php-fpm/www.conf
pm = dynamic
pm.max_children = 20 #static模式下空闲进程数上限,大于下面的值
pm.start_servers = 5 #动态方式下默认开启的进程数,在最小和最大之间
pm.min_spare_servers = 2 #动态方式下最少空闲进程数
pm.max_spare_servers = 8 #动态方式下最大空闲进程数
ps aux | grep php-fpm #查看 默认进程2个
pkill php-fpm #终止进程
/usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini #重新加载
ps aux | grep php-fpm