为了安全,如果暴露版本信息,黑客可以通过版本信息得知该版本存在的漏洞,进而对服务器进行攻击。隐藏版本信息可以避免黑客有的放矢的进行破坏。
[root@c7-1 ~]#nginx -v
nginx version: nginx/1.12.2
[root@c7-1 ~]#curl -I 127.0.0.1
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Fri, 08 Oct 2021 12:29:08 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Mon, 04 Oct 2021 12:54:14 GMT
Connection: keep-alive
ETag: "615af976-264"
Accept-Ranges: bytes
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
http {
......
server_tokens off; #添加此行内容,关闭版本号的显示
......
[root@localhost ~]# systemctl restart nginx
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
http {
......
#server_tokens off; #注释此行内容,开启版本号的显示
......
[root@localhost ~]# vim /opt/nginx-1.12.2/src/core/nginx.h
##修改版本号和名称,可伪装成其他服务(例如 apache、mysql 等)
#define NGINX_VERSION "5.7.20"
#define NGINX_VER "mysql/" NGINX_VERSION
#重新编译
cd /opt/nginx-1.12.2/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
make -j 4 && make install
systemctl restart nginx
#隐藏成功
[root@c7-1 ~]#nginx -v
nginx version: mysql/5.7.20
[root@localhost nginx-1.12.0]# vim /usr/local/nginx/conf/nginx.conf
user nginx nginx; #第二行,取消注释,修改用户为nginx,组为nginx
[root@localhost nginx-1.12.0]# systemctl restart nginx
[root@localhost nginx-1.12.0]# ps aux | grep nginx
#主进程由root创建,子进程由nginx创建
root 42095 0.0 0.0 20500 628 ? Ss 23:29 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 42096 0.0 0.0 22948 1404 ? S 23:29 0:00 nginx: worker process
root 42103 0.0 0.0 112676 976 pts/0 R+ 23:29 0:00 grep --color=auto nginx
当 nginx 将网页数据返回给客户端后,可设置缓存的时间,以方便在日后进行相同内容的请求时直接返回,避免重复请求,加快了访问速度。一般针对静态网页进行设置,对动态网页不设置缓存时间。
[root@localhost nginx-1.12.0]# vim /usr/local/nginx/conf/nginx.conf
......
server {
......
location ~ \.(gif|jpg|jpeg|png|bmp|ico)$ { #新建location,以图片作为缓存对象
root html;
expires 1d; #指定缓存时间为1天,一天半为1d12h
}
......
}
......
[root@localhost nginx-1.12.0]# systemctl restart nginx
在网页中加入图片后测试
[root@c7-1 /usr/local/nginx/html]#ls
50x.html index.html index.html.bak test.jpg
[root@c7-1 /usr/local/nginx/html]#vim index.html
#加入图片
</h1>
<img src="test.jpg"/>
</body></html>
编写脚本
[root@c7-1 /opt]# vim log_cut.sh
#!/bin/bash
#Filename:log_cut.sh
lastday=$(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-$lastday
mv /usr/local/nginx/logs/error.log $logs_path/test.com_error.log-$lastday
#移动并重命名日志文件
kill -USR1 $(cat $pid_path)
#重建新日志文件
find $logs_path -mtime +30 -exec rm -rf {} \;
#删除30天之前的日志文件
脚本测试
[root@c7-1 /opt]#chmod +x log_cut.sh
[root@c7-1 /opt]#./log_cut.sh
[root@c7-1 /opt]#cd /var/log/nginx/
[root@c7-1 /var/log/nginx]#ls
test.com_access.log-20211007 test.com_error.log-20211007
添加计划任务
[root@c7-1 ~]#crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@c7-1 ~]#crontab -l
0 1 * * * /opt/log_cut.sh
HTTP 有一个 KeepAlive 模式,它告诉 web 服务器在处理完一个请求后保持这个 TCP 链接的打开状态。若接收到来自同一客户端的其他请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接。
KeepAlive 在一段时间内保持打开状态,它们会在这段时间内占用资源,占用过多就会影响性能。
[root@c7-1 ~]#vim /usr/local/nginx/conf/nginx.conf
http {
......
keepalive_timeout 65 180;
client_header_timeout 80;
client_body_timeout 80;
......
}
[root@localhost nginx]# systemctl restart nginx
[root@c7-1 ~]#nproc --all #显示所有 CPU 数目
4
[root@c7-1 ~]#nproc #显示当前进程可用的 CPU 数目
4
[root@c7-1 ~]#ps aux | grep nginx #查看 nginx 主进程中包含几个子进程
root 6069 0.0 0.0 20544 608 ? Ss 10:47 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 6070 0.0 0.0 23072 1632 ? S 10:47 0:00 nginx: worker process
root 6693 0.0 0.0 112728 972 pts/3 S+ 10:56 0:00 grep --color=auto nginx
[root@c7-1 ~]#vim /usr/local/nginx/conf/nginx.conf
#user nobody;
worker_processes 4; #修改为核数相同或者 2 倍
worker_cpu_affinity 0001 0010 0100 1000;
#两个核就是 01 10 ;
# 8 个核就是 00000001 00000010 00000100 ...... 01000000 10000000
events {
worker_connections 4096; #单个工作进程可以允许同时建立外部连接的数量
}
[root@c7-1 ~]#systemctl restart nginx
nginx 的 ngx_http_gzip_module 压缩模块提供对文件内容压缩的功能。允许 nginx 服务器将输出内容在发送客户端之前进行压缩,以节约网站带宽,提升用户的访问体验,默认已经安装,可在配置文件中加入相应的压缩功能参数对压缩性能进行优化。
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
gzip on; #开启 gzip 压缩功能
gzip_min_length 1k; #压缩阈值,最小压缩为 1k
gzip_buffers 4 16k; # buffer 大小为 4 个 16k 缓冲区大小
gzip_http_version 1.1; #压缩版本(默认不设置)
gzip_comp_level 6; #压缩比率,最小为 1,处理速度快,传输速度慢,9 最大压缩比,处理速度慢,传输速度快(建议5-6)
gzip_disable "MSIE [1-6]\."; #配置禁用 gzip 条件,支持正则,表示 ie6 以下不启用 gzip
gzip_vary on; #支持前端缓存服务器存储压缩页面
gzip_types text/plain application/x-javascript text/css image/jpg image/jpeg image/png image/gif application/xml text/javascript application/x-httpd-php application/javascript application/json;
#支持的压缩类型
......
}
nginx -t
cd /usr/local/nginx/html/ #首页中插入 cat.jpg 图片进行测试
vim index.html
<h1>Welcome to nginx!</h1>
<img src="test.jpg"/> #插入一行
systemctl restart nginx
在企业网站中,一般都要配置防盗链功能,以避免网站内容被非法盗用,造成经济损失,也避免不必要的带宽浪费。
主机 | IP |
---|---|
nginx 服务端 | 192.168.10.12 |
盗链端 | 192.168.10.20 |
Windows10 | 192.168.10.10 |
预安装 nginx 服务
echo "192.168.10.12 www.nginx-server.com" >>/etc/hosts
上传 test.jpg 到 /usr/local/nginx/html 目录
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
ntpdate ntp1.aliyun.com
#安装 httpd 服务
yum -y install httpd
systemctl start httpd && systemctl enable httpd
#配置临时 DNS 映射
echo "192.168.10.12 www.nginx-server.com" >>/etc/hosts
echo "192.168.10.20 www.daolian.com" >>/etc/hosts
cat > /var/www/html/index.html <<EOF
this is a "盗链" test
EOF
systemctl restart httpd
#在 hosts 文件添加映射,需要管理员权限
C:\Windows\System32\drivers\etc\hosts
修改配置文件,添加如下内容
[root@nginx ~]#vim /usr/local/nginx/conf/nginx.conf
http {
......
server {
......
location ~* \.(jpeg|gif|jpg|swf)$ {
#匹配不区分大小写,以 .jpeg/.gif/.jpg/.swf 结尾的文件
valid_referers none blocked *.nginx-server.com nginx-server.com;
#设置信任来源可以正常访问资源
if ( $invalid_referer ) {
rewrite ^/ http://www.nginx-server.com/daolian.png;
#return 403;
#如果链接的来源域名不在 valid_referers 列表中,则 rewrite 跳转页面或者返回 403 页面
}
}
......
}
......
}
[root@nginx ~]#nginx -t
[root@nginx ~]#systemctl restart nginx
上传 daolian.jpg 图片到 /usr/local/nginx/html 目录下
nginx 的 PHP 解析功能实现如果是交由 FPM 处理的,为了提高 PHP 的处理速度,可对 FPM 模块进行参数的调整。
选项 | 说明 |
---|---|
pm.max_children | 指定启动的进程的最大的数量 |
pm.start_servers | 动态方式下初始的 ftpm 进程数量 |
pm.min_spare_servers | 动态方式下最小的 fpm 空闲进程数 |
pm.max_spare_servers | 动态方式下最大的 fpm 空闲进程数 |
假设云服务器上运行了个人论坛,内存为 1.5 GB ,fpm 进程数为20,内存消耗将近 1GB ,处理速度较慢,需对参数进行优化处理
[root@server ~]# vim /usr/local/php/etc/php-fpm.conf
pid = run/php-fpm.pid
[root@server ~]# vim /usr/local/php/etc/php-fpm.d/www.conf
pm = dynamic #将以动态的方式产生fpm进程
pm.max_children=20 #static模式下空闲进程数上限,大于下面的值
pm.start_servers = 5 #动态方式下默认开启的进程数,在最小和最大之间
pm.min_spare_servers = 2 #动态方式下最少空闲进程数
pm.max_spare_servers = 8 #动态方式下最大空闲进程数
#FPM 启动时有5个进程,最小空闲2个进程,最大空闲8个进程,最多可以有20个进程存在
#重启 php-fpm
[root@server ~]# kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
[root@server ~]# netstat -anpt | grep 9000