[root@server2 conf]# curl -I http://192.168.113.128
HTTP/1.1 200 OK
Server: nginx/1.22.0
[[root@server2 conf]#vim /usr/local/nginx/conf/nginx.conf
......
http {
include mime.types;
default_type application/octet-stream;
server_tokens off; #添加,关闭版本号
......
[root@server2 conf]# nginx -t #测试配置文件语法
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@server2 conf]# systemctl restart nginx #重启服务
[root@server2 conf]# curl -I http://192.168.113.128 #验证是否已隐藏
HTTP/1.1 200 OK
Server: nginx #隐藏成功
[root@server2 conf]# vim /opt/nginx-1.22.0/src/core/nginx.h
......
#define nginx_version 1012002
#define NGINX_VERSION "1.80.0" #修改版本号
#define NGINX_VER "mysql/" NGINX_VERSION #修改服务器类型
......
[root@server2 conf]# cd /opt/nginx-1.12.2/ #重新编译安装
root@server2 nginx-1.22.0]#
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
root@server2 nginx-1.22.0]# make
root@server2 nginx-1.22.0]# vim /usr/local/nginx/conf/nginx.conf
.......
http {
include mime.types;
default_type application/octet-stream;
server_tokens on; #开启版本号
[root@server2 conf]# nginx -t #检查语法
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@server2 conf]# systemctl restart nginx
[root@server2 conf]# curl -I http://192.168.113.128 #验证
HTTP/1.1 200 OK
Server: mysql/1.80.0 #成功
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
root@server2 nginx-1.22.0]# vim /usr/local/nginx/conf/nginx.conf
user nginx; #第一行,去掉注释,修改为nginx
worker_processes 1;
root@server2 nginx-1.22.0]# systemctl restart nginx
root@server2 nginx-1.22.0]# ps aux |grep nginx
root 8119 0.0 0.0 20500 604 ? Ss 01:00 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 8120 0.0 0.0 23028 1388 ? S 01:00 0:00 nginx: worker process #修改成功
root 8124 0.0 0.0 112676 976 pts/2 S+ 01:00 0:00 grep --color=auto nginx
root@server2 nginx-1.22.0]# vim /usr/local/nginx/conf/nginx.conf
location / {
root html;
index index.html index.htm;
}
location ~ \.(gif|jpg|jepg|png|bmp|ico)$ { #加入新的location,以图片作为缓存对象
root html;
expires 1d; #指定缓存时间为1天
}
......
2.上传图片到 html 目录中,访问页面
[root@server2 nginx-1.22.0]# cd /usr/local/nginx/html/
[root@server2 html]# rz -E
rz waiting to receive.
[root@server2 html]# ls
50x.html index.html Snipaste_2022-05-23_22-04-16.png
[root@server2 html]# mv Snipaste_2022-05-23_22-04-16.png tu.jpg ##图片名过长修改
[root@server2 html]# ls
50x.html index.html tu.jpg
[root@server2 html]# systemctl restart nginx
vim /opt/rzfg.sh
#!/bin/bash
#Filename:fenge.sh
day=$(date -d "-1 day" "+%Y%m%d") #-d表示设置,-1 day表示前一天
logs_path="/var/log/nginx" #日志存放的位置
pid_path="/usr/local/nginx/logs/nginx.pid"
[ -d $logs_path ] || mkdir -p $logs_path #判断是否有日志文件的目录,没有就创建
#移动访问日志到log_path,并命名test.com;脚本执行后创建日志进行命令,用时间戳的方式来标记唯一性
mv /usr/local/nginx/logs/access.log ${logs_path}/test.com-access.log-$day
kill -USER1 $(cat $pid_path) #重载然后生成新的access日志
find $logs_path -mtime +30 | xargs rm -rf #删除30天前的日志
#!/bin/bash
#Filename:fenge.sh
day=$(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-$day
kill -USER1 $(cat $pid_path)
find $logs_path -mtime +30 | xargs rm -rf
[root@server2 opt]# vim fenge.sh
[root@server2 opt]# sh -x fenge.sh
++ date -d '-1 day' +%Y%m%d
+ day=20220720
+ logs_path=/var/log/nginx
+ pid_path=/usr/local/nginx/logs/nginx.pid
+ '[' -d /var/log/nginx ']'
+ mv /usr/local/nginx/logs/access.log /var/log/nginx/dxz.com-access.log-20220720
++ cat /usr/local/nginx/logs/nginx.pid
+ kill -HUP 10900
+ find /var/log/nginx -mtime +30
+ xargs rm -rf
[root@server2 opt]# ls /var/log/nginx/
dxz.com-access.log-20220720 #成功按日期进行了日志分割
[root@server2 opt]# ls /usr/local/nginx/logs/
access.log error.log nginx.pid
[root@server2 opt]# date -s 2002-07-22 #修改时间进行测试
2002年 07月 22日 星期一 00:00:00 CST
[root@server2 opt]# bash /opt/fenge.sh
[root@server2 opt]# ls /var/log/nginx/ #成功分割
dxz.com-access.log-20020721 dxz.com-access.log-20220720
[root@server2 opt]# ntpdate ntp1.aliyun.com #再同步回时间
21 Jul 15:41:23 ntpdate[11505]: step time server 120.25.115.20 offset 631121933.366082 sec
[root@server2 opt]# date
2022年 07月 21日 星期四 15:41:58 CST
[root@server2 opt]# crontab -e
0 2 * * * /opt/fenge.sh #添加每天凌晨 2点 执行/opt/fenge.sh 脚本,进行日志分割
[root@server2 opt]# crontab -l
0 2 * * * /opt/fenge.sh
crontab(选项)(参数)
-e:编辑该用户的计时器设置;
-l:列出该用户的计时器设置;
-r:删除该用户的计时器设置;
-u<用户名称>:指定要设定计时器的用户名称
HTTP有一个KeepAlive摸式,它告诉web服务器在处理完一个请求后保持这个TcP连接的打开状态,若接收到来自同一客户端的其它请求,服务端会利用这个未被关闭的连接,而不需要再建立一
个连接。
KeepAlive
在一段时间内保持打开状态,它们会在这段时间内占用资源。占用过多就会影响性能。
[root@server2 opt]# vim /usr/local/nginx/conf/nginx.conf
http {
......
#keepalive_timeout 0;
keepalive_timeout 65; #设置连接保持超时时间
Client_header_timeout 80; #等待客户端发送请求头的超时时间,超时会发送408错误
Client_body_timeout 80; #等待客户端发送请求体的超时时间
......
keepalive timeout
指定KeepAlive的超时时间(timeout)。指定每个TcP连接最多可以保持多长时间,服务器将会在这个时间后关闭连接。Nginx的默认值是65秒,有些浏览器最多只保持60秒,所以可以设定为60秒。若将它设置为0,就禁止了keepalive连接。
第二个参数(可选的)指定了在响应头Keep-Alive:timeout=time中的time值。这个头能够让些浏览器主动关闭连接,这样服务器就不必去关闭连接了。没有这个参数,Ngix不会发送Keep-Alive响应头。
#ps aux 命令可以查看 Nginx 运行进程的个数
[root@server2 opt]# ps -aux | grep nginx
root 10900 0.0 0.0 20616 1488 ? Ss 15:02 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 11444 0.0 0.0 23120 1412 ? S 15:38 0:00 nginx: worker process
root 12020 0.0 0.0 112824 980 pts/0 S+ 16:27 0:00 grep --color=auto nginx
#master process 是 Nginx 的主进程,开启了一个;worker process 是子进程,开启了一个
#可以先查看 CPU 的核数来确定参数
[root@server2 opt]# cat /proc/cpuinfo |grep -c "physical"
8
[root@server2 opt]# vim /usr/local/nginx/conf/nginx.conf
1
2 user nginx;
3 worker_processes 8; #修改为8核
4 worker_cpu_affinity 10000000 01000000 00100000 00010000 00001000 00000100 00000010 00000001;
##10000000表示启用第一个CPU内核,01000000表示启用第二个CPU内核,以此类推
参数设置为8,和CPU的核数相同。
运行进程数设置多一些,响应客户端访问请求时,Nginx 就不会启动新的进程提供服务,从而减小了系统的开销,提升了服务的速度
修改完成后,重启服务,再使用 ps aux 命令查看运行进程数的变化情况
[root@server2 conf]# ps -aux |grep nginx
root 12557 0.0 0.0 20576 676 ? Ss 16:48 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 12558 0.0 0.0 23104 1376 ? S 16:48 0:00 nginx: worker process
nginx 12559 0.0 0.0 23104 1376 ? S 16:48 0:00 nginx: worker process
nginx 12560 0.0 0.0 23104 1376 ? S 16:48 0:00 nginx: worker process
nginx 12561 0.0 0.0 23104 1376 ? S 16:48 0:00 nginx: worker process
nginx 12562 0.0 0.0 23104 1376 ? S 16:48 0:00 nginx: worker process
nginx 12563 0.0 0.0 23104 1376 ? S 16:48 0:00 nginx: worker process
nginx 12564 0.0 0.0 23104 1376 ? S 16:48 0:00 nginx: worker process
nginx 12565 0.0 0.0 23104 1376 ? S 16:48 0:00 nginx: worker process
root 12570 0.0 0.0 112828 976 pts/0 S+ 16:48 0:00 grep --color=auto nginx
#开启了一个主进程和八个子进程,设置的参数成功生效了
#默认情况下,Nginx 的多个进程可能更多地跑在一个 CPU 上,可以分配不同的进程给不同的 CPU 处理,
#以充分利用硬件多核多 CPU 。
#在一台 8 核的 CPU 服务器上,设置每个进程分别由不同的 CPU 核心处理,来达到 CPU 的性能最大化。
[root@server2 conf]# vim/usr/local/nginx/conf/nginx.conf
http {
......
gzip on;
#开启gzip压缩功能
gzip_min_length 1k;
#用于设置允许压缩的页面最小字数
gzip_buffers 4 16k;
#表示申请4个单位为16KB的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果
gzip_http_version 1.1;
#用于识别http协议版本,默认是1.1,目前大部分浏览器已支持gzip压缩,但处理很慢,也比较消耗CPU资源
gzip_comp_level 6;
#用来指定gzip压缩比,压缩比1最小,处理速度最快;压缩比为9最大,传输速度快,但处理速度最慢,使用默认即可
gzip_vary on;
#该选项可以让前端的缓存服务器缓存经过gzip压缩的页面
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;
#压缩类型,表示哪些网页文档启用压缩功能
......
}
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 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;
[root@server2 conf]# cd /usr/local/nginx/html/
[root@server2 html]# ls
50x.html index.html
[root@server2 html]# rz -E
rz waiting to receive.
[root@server2 html]# ls
1.jpg 50x.html index.html
[root@server2 html]# vim index.html
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<h1>享受孤独就会变强 </h1>
<img src="1.jpg"/>
</body>
</html>
重启服务访问页面
root@server2 html]# systemctl restart nginx
盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率,受益者不提供资源或提供很少的资源,而真正的服务提供商却得不到任何的收益
盗链端http: 192.168.113.129
服务端nginx:192.168.113.128
vim /usr/local/nginx/conf/nginx.conf
http{
.........
server{
.....
location ~*\(jpglgiflswf)$ {
valid referers none blocked *.kgc.com kgc.com;
if ($invalid referer )
rewrite ^/http://www.kgc.com/error.png:
#return 403;
}
}
....}
....}
~*.(jpg|gifIswf)$:这段正则表达式表示匹配不区分大小写,以.jpg或.gif或.swf结尾的文件;
valid referers:设置信任的网站,可以正常使用图片;
none:允许没有http refer的请求访问资源(根据Referer的定义,它的作用是指示一个请求是从哪里链接过来的,如果直接在浏览器的地址栏中输入一个资源的URL地址,那么这种请求是不会包含Referer字段的),如http:Lw,kgc,com/game,jpg我们使用http:Lw.kgc,com访问显示的图片,可以理解成ttp:L,kgc,com/game,jpg这个请求是从http:Lwww,kgc,com这个链接过来的。
blocked:允许不是http:/开头的,不带协议的请求访问资源;
*.kgc.com:只允许来自指定域名的请求访问资源,如http:Lwww.kgc,com
if语句:如果链接的来源域名不在valid referers.所列出的列表中,invalid referer.为true,则执行后而的操作,即进行重写
或返回403页面
使用另外一台服务器192.168.113.129做盗链网站
#安装httpd
yum install -y httpd
#切换至/var/www/html
cd /var/www/html
[root@localhost html]# vim index.html
<html>
<body>
<img src="http://www.xtz.com/1.jpg"/>
</body>
</html>
#添加域名映射
#盗链网站
echo "192.168.113.129 www.xtj1.com" >>/etc/hosts
#目标网站
echo "192.168.113.128 www.xtj.com" >>/etc/hosts
#在Web源主机(192.168.113.128)添加域名解析
[root@server2 html]# vim /etc/hosts
192.168.113.128 www.xtj.com
#在Web源主机(192.168.113.128)添加图片
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
可以填字例:<h1> </h1>
<img src="1.jpg"/>
</body>
</html>
systemctl start httpd
验证:占用的是源主机的资源
编辑配置文件
注意:因为location匹配原则为匹配即停止,所以将上面的location注释了
[root@server2 html]# vim /usr/local/nginx/conf/nginx.conf
location ~* \.(jpg|gif|swf)$ {
valid_referers none blocked *.xtj.com xtj.com;
if ( $invalid_referer ) {
rewrite / http://www.xtj.com/daoban.png;
}
}
#检查语法是否有错
nginx -t
#将盗图图片拖进去
cd /usr/local/nginx/html/
[root@server2 html]# ls
1.jpg 50x.html daoban.png index.html
#重启服务
systemctl restart nginx.service
验证:
源主机
盗链网站访问