隐藏Nginx版本号,避免安全漏洞泄漏
第一种是修改 Nginx的主配置文件
第二种是修改Nginx源码文件,指定不显示版本号
[root@localhost ~]# curl -I localhost ##可以查看版本号等详细信息
HTTP/1.1 200 OK
Server: nginx/1.15.9
……省略部分
[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf
http {
include mime.types;
default_type application/octet-stream;
server_tokens off; ###插入这段字,隐匿服务器版本(on为开启,off为关闭)
……省略部分
[root@localhost~]# systemctl restart nginx ###重启Nginx服务
[root@localhost ~]# curl -I 127.0.0.1 ##再次查看,版本已经被隐匿
HTTP/1.1 200 OK
Server: nginx
……省略部分
Nginx源码文件nginx-1.15.9/src/core/nginx.h中包含了版本信息,可以随意设置,
然后重新编译安装,隐藏版本信息。
[root@localhost core]# vi /opt/nginx-1.15.9/src/core/nginx.h
……省略部分
#define NGINX_VERSION "1.1" ##直接修改版本号
#define NGINX_VER "IIS" NGINX_VERSION ##直接修改服务器信息
……省略部分
[root@localhost nginx-1.15.9]#
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
[root@localhost nginx-1.15.9]# make && make install
[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf
##我们需要展示修改过的服务器版本信息,因此需要开启展示功能
http {
include mime.types;
default_type application/octet-stream;
server_tokens on;
……省略部分
[root@localhost nginx-1.15.9]# curl -I 127.0.0.1
HTTP/1.1 200 OK
Server: IIS1.1
……省略部分
Nginx运行时进程需要有用户与组的支持,用以实现对网站文件读取时进行访问控制。
主进程由root创建,子进程由指定的用户与组创建。Nginx默认使用nobody 用户帐号与组帐号,一般也要进行修改。
一种是在编译安装时指定用户与组
另一种是修改配置文件指定用户与组。
[root@localhost opt]# cd nginx-1.15.9/
[root@localhost nginx-1.15.9]# ./configure \
--prefix=/usr/local/nginx \
--user=nginx \ ##指定用户
--group=nginx \ ##指定组账号
--with-http_stub_status_module
[root@localhost conf]# cd /usr/local/nginx/conf/
[root@localhost conf]# vi nginx.conf
……省略部分
user nginx nginx; ###修改用户为nginx,组为nginx (#user nobody;原本是指定nobody)
……省略部分
[root@localhost conf]# ps aux |grep nginx
root 14477 0.0 0.0 20568 640 ? Ss 23:25 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 14478 0.0 0.0 23108 1656 ? S 23:25 0:00 nginx: worker process
root 14789 0.0 0.0 112708 976 pts/1 S+ 23:53 0:00 grep --color=auto nginx
###Nginx查看进程运行情况,主进程由root帐户创建,子进程则由Nginx创建。
在主配置文件/nginx.conf中http{}区域内新建一个location区域,配置图片缓存时间
[root@localhost conf]# vi /usr/local/nginx/conf/nginx.conf
location ~\.(gif|jpg|jepg|png|bmp|ico)$ {
root html;
expires 1d; 缓存1天
}
(四)设置连接超时
[root@localhost conf]# vi /usr/local/nginx/conf/nginx.conf
http {
……省略部分
#keepalive_timeout 0;
keepalive_timeout 65 180; ##默认65秒,设置超时时间180s
client_header_timeout 80;
client_body_timeout 80;
……省略部分
访问http://20.0.0.12,抓包看报文,分析keepalivetimeout超时时间
[root@localhost conf]# vi /usr/local/nginx/conf/nginx.conf
gzip on; ##找到gzip on,去掉前面的注释开启压缩功能
gzip_buffers 4 64k; //表示申请4个单位为16k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果;
gzip_http_version 1.1;
gzip_comp_level 6; //用来指定gzip压缩比,1压缩比最小,处理速度最快;9压缩比最大,传输速度快,但处理速度最慢,使用默认即可;
gzip_min_length 1k; //用于设置允许压缩的页面最小字节数;
gzip_vary on;
gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss; //压缩类型,是对哪些网页文档启用压缩功能;
正版原网站(20.0.0.12)
[root@localhost html]# vi /usr/local/nginx/html/index.html ##制作一个正版网页
<html><body><h1>The original image</h1>
<img src="zb.jpg"/>
</body></html>
[root@localhost html]# vi /var/www/html/index.html
<html><body><h1>I'm NiuBi</h1>
<img src="http://20.0.0.12/zb.jpg"/>
</body></html>
登入20.0.0.18测试
再配置一台服务器Apache网站(20.0.0.11),作为防盗链重定向网站
[root@localhost html]# yum -y install httpd
[root@localhost html]# vi /var/www/html/index.html
<html><body><h1>ni fan shi le</h1>
<img src="jg.jpg"/>
</body></html>
到nginx服务器配置防盗链
[root@localhost html]# vim /usr/local/nginx/conf/nginx.conf
location ~*.(jpg|gif|swf)$ { 匹配以.(jpg|gif|swf)格式结尾的请求
valid_referers none blocked *.test.com test.com; 合法访问是以.test.com形式的请求
if ($invalid_referer) { 如果是非法访问
rewrite ^/ http://20.0.0.12/jg.jpg; 则重定向到 http://20.0.0.12/jg.jpg
}
}
再次访问http://20.0.0.18,图片发生改变,防盗链有效
随着Nginx运行时间的增加,产生的日志也会逐渐增加,为了方便掌握Nginx的运行状态,需要时刻关注Nginx日志文件。太大的日志文件对监控是一个大灾难,不便于分析排查,需要定期的进行日志文件的切割。
把Nginx的日志文件/usr/local/nginx/logs/access.log 移动到,目录/var/log/nginx下面,以当前时间做为日志文件的名称,然后用kill-USR1创建新的日志文件/usr/local/nginx/logs/access.log,最后删除30天之前的日志文件。
[root@www logs]# vi/opt/rizhifenge.sh
#!/bin/bash
#Filename: rizhifenge.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 ]ll mkdir -p $logs_path ####创建日志文件目录
mv /usr/local/nginx/logs/access.log ${
logs_path}/51xit.top-access.log-$d
###移动并重命名日志文件
kill-USR1 $(cat $pid path) ####重建新日志文件
find $logs_path -mtime +30 |xargs rm -rf ####删除30天之前的日志文件
[root@www logs]# chmod +x/opt/rizhifenge.sh ####添加权限
[root@www logs]# /opt/rizhifenge.sh ###执行分割脚本
[root@www ~]#ls /var/log/nginx
51xit.top-access.log-20180523 ###按日期分割了日志文件
[root@localhost proc]# cd /proc/
[root@localhost proc]# ls ##/proc/目录下cpuinfo和meminfo可以查看CPU和缓存信息
cpuinfo meminfo ……省略部分
processor : 0 ##从0开始数,有一个CPU核心就有一个processor
……省略部分
power management:
processor : 1
……省略部分
power management:
processor : 2
……省略部分
power management:
[root@localhost proc]# cat /proc/cpuinfo |grep -c "processor" ##可以查看CPU核心数
3
[root@localhost proc]# ps aux |grep nginx ##查看进程开启情况,一个root主进程,一个子进程
root 12872 0.0 0.0 20556 668 ? Ss 05:52 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 12873 0.0 0.0 23040 1684 ? S 05:52 0:00 nginx: worker process
[root@localhost proc]# vi /usr/local/nginx/conf/nginx.conf
……省略部分
worker_processes 3; ##进程数改为3,工作进程数默认为1,
worker_cpu_affinity 001 010 100; ##插入这行字段,配置负载均衡,没有闲置的cpu核心
……省略部分
events {
worker_connections 1024; ##每个工作进程可以建立的连接数
}
[root@localhost proc]# systemctl restart nginx ##重启生效
[root@localhost proc]# ps aux |grep nginx ##查看到一个root主进程,三个子进程
root 14059 0.0 0.0 20556 660 ? Ss 07:20 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 14060 0.0 0.0 23040 1432 ? S 07:20 0:00 nginx: worker process
nginx 14061 0.0 0.0 23040 1432 ? S 07:20 0:00 nginx: worker process
nginx 14062 0.0 0.0 23040 1432 ? S 07:20 0:00 nginx: worker process
Pm.max_children 指定启动的进程数量最大的数量,同时也是活着的(注意:“活着"不等于"工作中”,“杀死"不等于"空闲”)
Pm.start.servers 动态方式下初始的ftpm 进程数量,启动时创建的子进程数量
Pm.min_spare_servers 动态方式下最小的fpm“空闲”子进程的最小数量;状态(等待处理),如果“空闲”进程的数量的值小于这个值,那么将创建一些子节点。
Pm.max_spare_servers 动态方式下最大的空闲进程数;状态(等待处理)。如果“空闲”进程的数量大于这个数字,那么多出的一些子进程会被杀死。
假设场景:现有云服务器,运行了个人论坛,内存为1.5G,fpm进程数为20,内存消耗近1G,处理比较慢,对参数进行优化处理。
root@www etc]# cd /usr/local/php/etc/php-fpm.d
[root@www etc]# vi www.conf
pm=dynamic ##动态方式
pm.max_children=20
pm.start_servers=5
pm.min_spare_servers=2
pm.max_spare_servers=8
pm.process_idle_timeout=500