隐藏nginx版本号、避免安全漏洞泄露
nginx隐藏版本号的方法
#安装nginx环境所需的软件包
[root@promote ~]# yum install gcc gcc-c++ make pcre-devel zlib-devel -y
#创建运行用户和组
[root@promote ~]# useradd -M -s /sbin/nologin nginx
#把nginx压缩包上传到/opt目录 解压压缩包
[root@promote ~]# cd /opt
[root@promote opt]# ls
nginx-1.12.2.tar.gz rh
[root@promote opt]# tar xzvf nginx-1.12.2.tar.gz
#编译安装
[root@promote opt]# cd nginx-1.12.2/
[root@promote nginx-1.12.2]# ./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-http_stub_status_module
[root@promote nginx-1.12.2]# make && make install
#优化执行路径
[root@promote nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
#启动服务
[root@promote nginx-1.12.2]# iptables -F
[root@promote nginx-1.12.2]# setenforce 0
[root@promote nginx-1.12.2]# nginx
[root@promote nginx-1.12.2]# vim /usr/local/nginx/conf/nginx.conf
17 http {
18 include mime.types;
19 default_type application/octet-stream;
20 server_tokens off; #增加此行,表示关闭版本号
[root@promote nginx-1.12.2]# killall -s QUIT nginx
[root@promote nginx-1.12.2]# nginx
[root@promote nginx-1.12.2]# curl -I http://192.168.209.134
HTTP/1.1 200 OK
Server: nginx ##此处隐藏了版本号信息
Date: Mon, 10 Aug 2020 12:00:34 GMT
Content-Type: text/html
Content-Length: 636
Last-Modified: Mon, 10 Aug 2020 07:34:13 GMT
Connection: keep-alive
ETag: "5f30f875-27c"
Accept-Ranges: bytes
nginx源码文件/opt/nginx-1.12.2/src/core/nginx.h包含版本信息,可以随意设计
[root@promote nginx-1.12.2]# ls
auto CHANGES CHANGES.ru conf configure contrib html LICENSE Makefile man objs README src
[root@promote nginx-1.12.2]# cd src/
[root@promote src]# ls
core event http mail misc os stream
[root@promote src]# cd core/
[root@promote core]# ls | grep nginx.h
nginx.h
[root@promote core]# vim nginx.h
修改完成后重新编译安装,启动服务,访问网站使用curl -I 命令检测
nginx运行时,进程需要有用户与组的支持,以实现对网站文件读取时进行访问控制
nginx默认使用nobody用户账号与组账号
修改的方法:
[root@promote core]# vim /usr/local/nginx/conf/nginx.conf
2 user nginx; #取消此行注释,把nobody改为nginx
当nginx将网页数据返回给客户端后,可设置缓存的时间,以方便在日后进行相同内容的请求时,直接返回,避免重复请求,加快访问速度。
一般针对静态网页设置,对动态网页不设置缓存时间。
修改配置文件,在http段、或者server段、location段加入对特定内容的过期参数
以图片为例,修改配置文件
[root@promote ~]# vim /usr/local/nginx/conf/nginx.conf
......
location ~\.(gif|jpg|jpeg|png|bmp|ico)$ {
root html;
expires 1d; #缓存时间1天
}
......
首先在nginx站点的首页插入一张图片,然后Windows访问nginx网站
[root@promote ~]# cd /opt
[root@promote opt]# vim 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)
#删除30天前的日志
find $logs_path -mtime +30 | xargs rm -rf
[root@promote opt]# chmod +x fenge.sh
[root@promote opt]# ./fenge.sh
[root@promote opt]# cd /var/log/nginx/
[root@promote nginx]# ls
test.com-access.log-20200810 ##日志文件切割成功
为避免同一客户端长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间
超时参数:
nginx使用Keepalive_timeout来指定Keepalive的超时时间(timeout),指定每个tcp连接最多可以保持多长时间,nginx的默认值是65秒,有些游览器最多只支持60秒,若将它设置为0就禁止了keepalive连接。
[root@promote nginx]# vim /usr/local/nginx/conf/nginx.conf
http {
...
keepalive_timeout 65;
client_header_timeout 40; #等待客户端发送请求头的超时时间,超时会发送408错误
client_body_timeout 40; #设置客户端发送请求体的超时时间
...
}
nginx的压缩模块提供了对文件内容压缩的功能,允许nginx服务器将传输的内容发送到客户端之前进行压缩,以节约网站带宽,提升用户的访问体验。
[root@promote nginx]# vim /usr/local/nginx/conf/nginx.conf
http {
...
gzip on; #打开gzip压缩功能
gzip_min_length 1k; #用于设置允许压缩的页面最小字节数
gzip_buffers 4 16k; #用于申请4个单位为16k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果
gzip_http_version 1.1; #设置识别http协议版本号
gzip_comp_level 6; #设置压缩等级,最小为1,处理速度快,传输速度慢,最大为9,处理速度慢,传输速度快
gzip_types text/plain application/x-javascript test/css image/jpeg image/png image/gif application/xml test/javascript application/x-httpd-php application/javascript application/json; #压缩类型,对哪些网页文档启用压缩功能
gzip_disable "MSIE [1-6]\."; #配置禁用gzip条件,支持正则,表示ie6以下不启用gzip
gzip_vary on; #让前端的缓存服务器缓存经过gzip压缩的页面
...
}
盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告)直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率受益者不提供资源或提供很少的资源,而真正的服务提供商却得不到任何的收益
网站盗链会大量消耗被盗链网站的带宽,而真正的点击率也许会很小,严重损害了被盗链网站的利益
早期的盗链一般是一些比较小的网站盗取一些有实力的大网站的地址,盗链的目标比较有针对性
现如今,一些大型的网站也已经开始把盗链的目光锁定在了整个互联网上,窃取整个互联网上的其它机器的带宽
常见的盗链有以下几种:图片盗链、音频盗链、视频盗链、文件盗链
一般被访问浏览的页面并不是一次全部传送到客户端的
如果客户请求的是一个带有许多图片和其它信息的页面,那么最先的一个HTTP 请求被传送回来的是这个页面的HTML文本
客户端浏览器对这段文本解释执行后,发现其中还有其它文件,客户端浏览器会再发送一条或者更多HTTP请求
当这些请求被处理后其它文件才被传送到客户端,然后浏览器将这些文件放到页面的正确位置
一个完整的页面要经过发送多条HTTP 请求才能够被完整地显示
基于这样的机制,盗链就成为可能,服务提供商完全可以在自己的页面中嵌入别人的链接,显示在自己的页面上,以达到盗链的目的
WEB应用防火墙通过实现URL级别的访问控制,对客户端请求进行检测
如果发现图片、文件等资源信息的HTTP请求来自于其它网站,则阻止盗链请求,节省因盗用资源链接而消耗的带宽和性能
主机信息 | 主机功能 |
---|---|
server1(192.168.209.134) | 被盗链服务器 |
server2(192.168.209.142) | 盗链服务器 |
客户端 | 访问验证 |
[root@promote ~]# cd /usr/local/nginx/html/
[root@promote html]# vim index.html
...
14 Welcome to nginx!
15 插入此行
...
[root@promote nginx]# vim /usr/local/nginx/conf/nginx.conf
...
location ~*\.(jpg|gif|swf)$ {
valid_referers none blocked *.nxd.com nxd.com;
if ( $invalid_referer ) {
rewrite ^/ http://www.nxd.com/error.png;
}
}
...
[root@promote nginx]# cd /usr/local/nginx/html/
[root@promote html]# ls
50x.html animal.jpg index.html
[root@promote html]# rz -E
rz waiting to receive.
[root@promote html]# ls
50x.html animal.jpg error.png index.html
[root@promote html]# killall -s QUIT nginx
[root@promote html]# nginx
Nginx的PHP解析功能实现如果是交由FPM处理的,为了提高PHP的处理速度,可对FPM模块进行参数的调整
FPM模块参数调整,要根据服务器的内存与服务负载进行调整
启动fpm进程方式
static:将产生固定数量的fpm进程
dynamic:将以动态的方式产生fpm进程
通过pm参数指定
[root@localhost ~]# vim /usr/local/php/etc/php-fpm.conf
17 pid = run/php-fpm.pid
18 pm = dynamic
19 pm.max_children=20
20 pm.static_servers = 5
21 pm.min_spare_servers = 2
22 pm.max_spare_servers = 8