理论+实验·Nginx优化及防盗链

理论+实验·Nginx优化及防盗链

配置Nginx隐藏版本号

隐藏Nginx版本号,避免安全漏洞泄漏

Nginx隐藏版本号的方法

修改配置文件

http{
  ......
  server_tokens off;
  ......
}

实验步骤

#安装环境

yum -y install gcc gcc-c++ pcre pcre-devel zlib-devel

#解压源码包到opt目录下

[root@localhost opt]# tar zxvf nginx-1.12.2

#创建程序型用户

[root@localhost opt]# useradd -M -s /sbin/nologin nginx

#编译安装

[root@localhost opt]# cd nginx-1.12.2/
[root@localhost nginx-1.12.2]# ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
[root@localhost nginx-1.12.2]# make && make install

#修改nginx配置文件

[root@localhost nginx-1.12.2]# vim /usr/local/nginx/conf/nginx.conf
http{
  ......
  server_tokens off;
  ......
}
[root@localhost nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/

#开启服务并 验证

[root@localhost nginx-1.12.2]# nginx 
[root@localhost nginx-1.12.2]# netstat -antp | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      22841/nginx: master 
[root@localhost nginx-1.12.2]# curl -I http://20.0.0.26
HTTP/1.1 200 OK
Server: nginx								===>不显示版本
Date: Mon, 10 Aug 2020 10:43:42 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Mon, 10 Aug 2020 10:41:18 GMT
Connection: keep-alive
ETag: "5f31244e-264"
Accept-Ranges: bytes

修改源码文件

[root@localhost ~]# vim /opt/nginx-.12.0/src/core/nginx.h
......
#define NGINX_VERSION "1.1.1"	===>修改版本号为1.1.1
......

实验步骤

#修改源码文件

[root@localhost opt]# vim nginx-1.12.2/src/core/nginx.h
......
#define NGINX_VERSION      "1.12.2"			===>修改成"1.1.1"
......

#安装环境

yum -y install gcc gcc-c++ pcre pcre-devel zlib-devel

#解压源码包到opt目录下

[root@localhost opt]# tar zxvf nginx-1.12.2

#创建程序型用户

[root@localhost opt]# useradd -M -s /sbin/nologin nginx

#编译安装

[root@localhost opt]# cd nginx-1.12.2/
[root@localhost nginx-1.12.2]# ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
[root@localhost nginx-1.12.2]# make && make install

#开启服务并 验证

[root@localhost nginx-1.12.2]# nginx 
[root@localhost nginx-1.12.2]# netstat -antp | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      22841/nginx: master 
[root@localhost nginx-1.12.2]# curl -I http://20.0.0.26
HTTP/1.1 200 OK
Server: nginx/1.1.1								===>显示的时在源码里面修改后的
Date: Mon, 10 Aug 2020 10:43:42 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Mon, 10 Aug 2020 10:41:18 GMT
Connection: keep-alive
ETag: "5f31244e-264"
Accept-Ranges: bytes

修改Nginx用户与组

Nginx运行时进程需要有用户与组的支持,以实现对网站文件读取时进行访问控制

Nginx默认使用nobody用户账号与组账号

修改的方法

​ 编译安装时指定用户与组

[root@localhost ~]# ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module

​ 修改配置文件指定用户与组

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
#user nobody;		===>将注释"#"去掉,nobody改成用户与组

配置Nginx网页缓存时间

当Nginx将网页数据返回给客户端后,可设置缓存的时间,以方便在日后进行相同内容的请求时直接返回,避免重复请求,加快了访问速度

一般针对静态页面设置,对动态页面不设置缓存时间

设置方法

​ 修改配置文件,在http{…}或者server{…}或者location{…}加入对特定内容的过期参数

示例

​ 修改Nginx的配置文件,在location{…}加入expires参数

[root@localhost ~]#vim /usr/local/nginx/conf/nginx.conf
......
location ~\.(gif|jpg|jpeg|png|bmp|ico)${	===>对格式为gif,jpg,jpeg,png,bmp,ico结尾的文件
	root html;
	expires 1d;								===>缓存时间一天
}

实现Nginx的日志切割

随着Ngin运行时间增加,日志也会增加.为了方便掌握Nginx运行状态,需要时刻关注Nginx日志文件

太大的日志文件对监控时一个大灾难

​ 定期进行日志文件的切割

Nginx自身不具备日志分割处理的功能,但可以通过Nginx信号控制功能的脚本实现日志的自动切割

通过Linux的周期性计划任务进行日志切割

编写脚本进行日志切割思路

​ 设置时间变量

​ 设置保存日志路径

​ 将目前的日志文件进行重命名

​ 重建新日志文件

​ 删除时间过长的日志文件

​ 设置周期性任务,定期执行脚本自动进行日志分割

#!/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)
#找到30天前的日志并删除
find $logs_path -mtime +30 | xarge rm -rf

实验步骤

#自行手工编译nginx

#编写脚本

[root@localhost opt]# vim /opt/fenge.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

#创建周期性任务计划实现自动化

[root@localhost opt]# crontab -e
0 01 * * * /opt/fenge.sh					===>指定某一个时间运行

配置Nginx实现连接超时

为避免同一客户端长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间

超时参数

	Keepalive_timeout					===>设置连接保持超时时间
	Client_header_timeout				===>指定等待客户端发送请求头的超时时间
	Client_body_timeout					===>设置请求主体的超时时间

实验步骤

#自行手工编译nginx

#修改nginx配置文件

[root@localhost nginx-1.12.2]# vim /usr/local/nginx/conf/nginx.conf
......
    keepalive_timeout  		100;
    Client__header_timout	80;
    Client_body_timeout		45;
......

更改Nginx运行进程数

在高并发场景,需要启动更多的Nginx进程以保证快速响应,以处理用户的请求,避免造成阻塞

更改进程数的配置方法

​ 修改配置文件,修改进程配置参数

修改配置文件的worker_processes参数

​ 一般设为CPU的个数或者核数

​ 在高并发情况下可设置为CPU个数或者核数的2倍

增加进程数,可减少系统的开销,提升了服务速度

使用ps aux查看运行进程数的变化情况

[root@localhost ~]# cat /proc/cpuinfo | grep "physical"		===>可以查看可以修改的最大核心数
4

[root@localhost ~]# vim /usr/local/nginx/conf/nginx
worker_processes 4;

实验步骤

#自行手工编译nginx

#修改nginx配置文件

[root@localhost nginx-1.12.2]# vim /usr/local/nginx/conf/nginx.conf
......
worker_processes 4;
......

实现Nginx网页压缩

Nginx的nginx_http_gzip_module压缩提供了对文件内容进行压缩的功能,允许Nginx服务器将输出内容2发送到客户端之前进行压缩,这样文件内容变小传输速度变快,以便于节约网站的带宽,提升用户体验,模块默认已经安装!

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
    gzip on;								===>开启gzip压缩输出
    gzip_min_length 1k;					===>用于设置允许压缩的页面最小字节数 
    gzip_buffers 4 16k;						===>表示申请4个单位为16k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间存储gzip压缩结果   
    gzip_http_version 1.1;					===>设置识别http协议版本,默认是1.1  
    gzip_comp_level 2;						===>gzip 压缩比, 1-9等级
    gzip_types text/plain application/x-javascrip text/css image/jpg image/jpeg image/png image/gif application/xml text/javascript application/x-httpd-php application/javascript application/json;	===>压缩类型,就是对哪些网页文档启用压缩功能
    gzip_vary on; 							===>压缩包缓存

实验步骤

#自行安装nginx

#修改配置文件

[root@localhost html]# 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 2;
    gzip_types text/plain application/x-javascrip text/css image/jpg image/jpeg image/png image/gif application/xml text/javascript application/x-httpd-php application/javascript application/json;
    gzip_vary on; 
......

实验结果

#利用fiddler抓包查看

image-20200810190605798

实现Nginx防盗链

在企业网站服务中,一般都要配置防盗链功能,以避免网站内容被非法盗用,造成经济损失

Nginx防盗链功能也非常强大。默认情况下,只需要进行简单的配置,即可实现防盗链处理

配置方法

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
......
     location ~*\.(jpg|gif|swf)$ {
        valid_referers none blocked *.test.com test.com;
        if ( $invalid_referer ) { 
                rewrite ^/ http://www.test.com/error.png;
        }   
}

实验环境

CentOS 7.6 ===>两台一台需要用来盗链

Win 10 ===>用来验证使用

实验步骤

#自行安装域名解析===>博客内有文章详细写可以自行搜索了查看

#安装nginx(IP地址20.0.0.26)

#安装环境

yum -y install gcc gcc-c++ pcre pcre-devel zlib-devel bind

#解压源码包到opt目录下

[root@localhost opt]# tar zxvf nginx-1.12.2

#创建程序型用户

[root@localhost opt]# useradd -M -s /sbin/nologin nginx

#编译安装

[root@localhost opt]# cd nginx-1.12.2/
[root@localhost nginx-1.12.2]# ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
[root@localhost nginx-1.12.2]# make && make install
[root@localhost nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/

#修改配置文件

[root@localhost opt]# vim /usr/local/nginx/conf/nginx.conf
......
	location ~*\.(jpg|gif|swf)$ {
        valid_referers none blocked *.test.com test.com;
        if ( $invalid_referer ) { 
                rewrite ^/ http://www.test.com/error.png;
        }   
}
......

#配置网页站点

[root@localhost html]# vim /usr/local/nginx/html/index.html 
......
<h1>Welcome to nginx!</h1>
<img src="test.jpg"/>
......
[root@localhost html]# nginx

#安装nginx(IP地址20.0.0.25)

#安装环境

yum -y install gcc gcc-c++ pcre pcre-devel zlib-devel bind

#解压源码包到opt目录下

[root@localhost opt]# tar zxvf nginx-1.12.2

#创建程序型用户

[root@localhost opt]# useradd -M -s /sbin/nologin nginx

#编译安装

[root@localhost opt]# cd nginx-1.12.2/
[root@localhost nginx-1.12.2]# ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
[root@localhost nginx-1.12.2]# make && make install
[root@localhost nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/

#配置网页站点

[root@localhost nginx-1.12.2]# vim /usr/local/nginx/html/index.html
<h1>this is daolian web</h1>
<img src="http://www.test.com/error.png"/>
[root@localhost nginx-1.12.2]# nginx

实验结果

在浏览器上面输入"www.test.com"

image-20200810193227038

在浏览器上面输入"20.0.0.25"

image-20200810193256911

php-fpm参数优化

优化原因:

​ 服务器为云服务器,运行了个人论坛,内存为15G,fpm进程数为20,内存消耗近1G,处理比较慢

优化参数调整

​ FPM启动时有5个进程,最小空闲2个进程,最大空闲8个进程,最多可以有20个进程存在

[root@localhost ~]# vim php-fpm.conf
pm=dynamic							===>将以动态的方式产生fpm进程
pm.max_children=20					===>指定启动的进程数量
pm.start_servers = 5				===>动态方式下初始的进程数量
pm.min_spare_servers = 2			===>动态方式下最小的fpm空闭进程数
pm.max_spare_servers = 8			===>动态方式下最大的fpm空闭进程数

php-fpm参数优化

优化原因:

​ 服务器为云服务器,运行了个人论坛,内存为15G,fpm进程数为20,内存消耗近1G,处理比较慢

优化参数调整

​ FPM启动时有5个进程,最小空闲2个进程,最大空闲8个进程,最多可以有20个进程存在

[root@localhost ~]# vim php-fpm.conf
pm=dynamic							===>将以动态的方式产生fpm进程
pm.max_children=20					===>指定启动的进程数量
pm.start_servers = 5				===>动态方式下初始的进程数量
pm.min_spare_servers = 2			===>动态方式下最小的fpm空闭进程数
pm.max_spare_servers = 8			===>动态方式下最大的fpm空闭进程数

猜你喜欢

转载自blog.csdn.net/weixin_47153668/article/details/107927223
今日推荐