文章目录
一、隐藏/伪装版本号
- 实际生产环境中 将版本号暴漏版本号在外面 也会造成一定的安全隐患 所以可以将其进行隐藏或者伪装为别的服务
- 通过抓包工具Fiddler 可以查看nginx版本号 也可以通过http访问的报文头部查看
- 也可以简便的方法查看
使用curl命令
curl -I http://192.168.100.129
1. 隐藏版本号
- 可以通过修改配置文件来实现
vim /usr/local/nginx/conf/nginx.conf
http {
include mime.types;
default_type application/octet-stream;
#20行左右;添加;关闭版本号
server_tokens off; #此行为手动添加
......
}
systemctl restart nginx
2. 伪装版本号
- 需要将源码文件修改 并重新编译安装
修改源码文件
vim /opt/nginx-1.12.2/src/core/nginx.h
#13行;修改版本号
#define NGINX_VERSION "1.1.1"
#14行;修改为windos的http服务
#define NGINX_VER "IIS" NGINX_VERSION
重新编译安装
cd /opt/nginx-1.12.2/
./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;
# 这是上面修改的一行 这里是伪装 所以需要将版本号显示出来 可以删除此行或改为 on
......
}
systemctl restart nginx
二、页面缓存
1. 修改配置文件
同样是修改配置文件来实现
vim /usr/local/nginx/conf/nginx.conf
http {
......
server {
......
location / {
root html;
index index.html index.htm;
}
#加入新的 location,以图片作为缓存对象 匹配规则都是常见图片的后缀
location ~ \.(gif|jpg|jepg|png|bmp|ico)$ {
root html;
#指定缓存时间,1天
expires 1d;
}
......
}
}
systemctl restart nginx.service
2. 拖入图片到首页目录 并修改首页内容
3. 重启服务测试
三、日志分割
1. 编写日志分割脚本并添加进周期性任务
vim fenge.sh
#!/bin/bash
#设置变量
#设置显示前一天的时间的变量
day=$(date -d "-1 day" "+%F")
logs="/var/log/nginx"
pid=`cat /usr/local/nginx/logs/nginx.pid`
#创建日志文件目录
[ -d $logs || mkdir -p $logs
#移动并重命名日志文件
mv /usr/local/nginx/logs/access.log ${logs}/xxx.com-access.log-{$day}
#重建日志文件
kill -USR1 $pid
#删除30天前的日志文件
find $logs -mtime +30 -exec rm -rf {} \; ps:
关于时间参数mtime的解释写在下面
执行脚本并查看日志是否生成
source fenge.sh
ls /var/log/nginx
ls /usr/local/nginx/logs/
添加进周期性任务 让其每天自动执行脚本进行日志分割
crontab -e
0 1 * * * /fenge.sh
日志脚本解释如下:
查看验证:
添加周期性任务:
Linux下文件三个时间参数:
-
modification time(mtime):内容修改时间
这里的修改时间指的是文件的内容发生变化,而更新的时间。
-
change time(ctime):状态修改时间
这里的修改时间指的是文件的属性或者权限发生变化,而更新的时间。
-
access time(atime):最后访问时间
这里的访问时间是指文件被读取,而更新的时间。
在Linux下操作命令分别为:
-
ls -l 获取文件最后一次内容修改的时间(modification time(mtime))
-
ls -lu 获取文件最后一次访问的时间(change time(ctime))
-
ls -lc 获取文件最后一次状态的改变时间(access time(atime))
-
在Linux下文件没有创建时间这个概念,若文件从创建后不曾修改过则可认为创建时间=修改时间,若文件创建后状态也不曾改变过则可认为创建时间=改变时间,若文件创建后不曾被读取过则可认为创建时间=访问时间。但是,上述情况基本上是不可能的,也就是说几乎不可能获取到文件的创建时间。
四、连接超时 keeplive
- KeepAlive模式,它告诉web服务器在处理完一个请求后保持这个TCP连接的打开状态。若接收到来自客户端的其它请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接。
- KeepAlive 在一段时间内保持打开状态,它们会在这段时间内占用资源。占用过多就会影响性能。
1. 修改配置文件
vim /usr/local/nginx/conf/nginx.conf
http {
......
keepalive_timeout 60 300;
client_header_timeout 80;
client_body_timeout 80;
......
}
systemctl restart nginx.service
关于keepalive_timeout ; client_header_timeout ; client_body_timeout 解释:
五、更改进程数
cat /proc/cpuinfo | grep -c "physical id" #查看cpu物理核数
ps aux | grep nginx #查看nginx主进程中包含几个子进程
修改配置文件
vim /usr/local/nginx/conf/nginx.conf
worker_processes 4; #修改的进程数应为核心数*2或相同
#添加;设置每个进程由不同cpu处理,0001表示启用第一个CPU内核,0010表示启用第二个CPU内核,依此类推
worker_cpu_affinity 0001 0010 0100 1000;
PS:最多八个cpu 再多就不会得到负载改善了 反而会降低稳定性
六、网页压缩
1. 修改配置文件
vim /usr/local/nginx/conf/nginx.conf
http {
......
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 6;
gzip_vary on;
gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss image/jpg image/jpeg image/png image/gif application/x-httpd-php application/javascript application/json;
......
}
systemctl restart nginx
解释如下:
2. 重启服务验证
七、配置防盗链
1. 修改配置文件(原服务器)
vim /usr/local/nginx/conf/nginx.conf
http {
......
server {
......
location ~*\.(jpg|gif|swf)$ {
valid_referers *.test.com test.com;
if ( $invalid_referer ) {
rewrite ^/ http://www.test.com/error.png;
#return 403;
}
}
......
}
}
解释如下:
- valid_referers :设置信任的网站,可以正常使用图片;
后面的网址或者域名 :referer 中包含相关字符串的网址; - if语句:如果链接的来源域名不在valid_referers所列出的列表中,$invalid_referer为1,则执行后面的操作,即进行重写或返回 403 页面。
2. 准备首页内容
3. 准备一个盗链主机
- 需要部署完nginx服务
- 准备 盗链主机的首页内容
- 准备hosts映射
echo "192.168.100.129 www.xyz.com" >> /etc/hosts
echo "192.168.100.101 www.xxx.com" >> /etc/hosts
将需要盗用的图片url放入自己的首页内容内
4. 盗链主机测试
八、fpm参数优化
-
Nginx的PHP解析功能实现如果是交由FPM处理的,为了提高PHP的处理速度,可对FPM模块进行参数的调整
-
FPM模块参数调整,要根据服务器的内存与服务负载进行调整
-
启动fpm进程方式 有两种
- static:将产生固定数量的fpm进程 static使用pm.max_children指定启动进程数
- dynamic:将以动态的方式产生fpm进程 dynamic根据服务器内存与服务负载进行调整 通过pm参数指定
vim /usr/local/php/etc/php-fpm.d/www.conf
#启动php-fpm,不可用于重启
/usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini
#执行开启命令后,就可以使用下面这条命令查看pid号重启php-fpm
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`