目录
一、隐藏版本号
?二、修改用户与组?
三、缓存时间?
?四、日志切割?
五、连接超时
六、更改进程数
七、网页压缩?
?八、盗链与防盗链
九、Nginx监控模块简介
在企业信息化应用环境中,服务器的安全性和响应速度需要根据实际情况进行响应参数配置,以达到最优的用户体验。 默认的?Nginx?安装参数只能提供最基本的服务,还需要调如网页缓存时间、连接超时、网页压缩等响应参数,才能发挥出服务器的最大作用。
一、隐藏版本号
?可以使用 Fiddler 工具抓取数据包,查看 Nginx版本,也可以在 CentOS 中使用命令 curl -I http://192.168.111.90?显示响应报文首部信息
??方法一:修改配置文件方式
添加,关闭版本号
vim /usr/local/nginx/conf/nginx.conf
添加server_tokens off;
?重启服务,再查看,版本号已隐藏?
?方法二:修改源码文件,重新编译
vim /opt/nginx-1.15.9/src/core/nginx.h
?重新加载
cd /opt/nginx-1.15.9/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
?编译安装
?开启版本信息
?vim /usr/local/nginx/conf/nginx.conf
?查看版本信息
?二、修改用户与组?
vim /usr/local/nginx/conf/nginx.conf
user nginx nginx; #取消注释,修改用户为 nginx ,组为 nginx
?
?systemctl restart nginx
ps aux | grep nginx
三、缓存时间?
vim /usr/local/nginx/conf/nginx.conf
????????加入新的 location,以图片作为缓存对象
????????指定缓存时间,1天
?cd到? ?/usr/local/nginx/html/? 加入一张照片
?访问网页? http://192.168.111.100/图片名字
访问 http://192.168.111.100/1661946089859.png?,双击200响应消息查看响应头中包含 Cahce-Control:max-age=86400 表示缓存时间是 86400 秒。也就是缓存一天的时间,一天之内浏览器访问这个页面,都是用缓存中的数据,而不需要向 Nginx 服务器重新发出请求,减少了服务器的使用带宽。
?四、日志切割?
vim /rizhi.sh
vim /rizhi.sh
#!/bin/bash
d=$(date -d "-1 day" "+%Y%m%d") #显示前一天的时间
logs_path="/var/log/nginx"
pid_path=`cat /usr/local/nginx/logs/nginx.pid`
[ -d $logs_path ] || mkdir -p $logs_path #创建日志文件目录
#移动并重命名日志文件
mv /usr/local/nginx/logs/access.log ${logs_path}/wu.com-access.log-{$d}
#重建日志文件
kill -USR1 $pid_path
#删除30天前的日志文件
find $logs_path -mtime +30 -exec rm -rf {} \;
#find $logs_path -mtime +30 |xargs rm -rf
? 执行并查看
?crontab -e 0 1 * * * /root/fenge.sh ? #设置周期性计划
五、连接超时
?HTTP有一个KeepAlive模式,它告诉web服务器在处理完一个请求后保持这个TCP连接的打开状态。若接收到来自客户端的其它请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接。?KeepAlive 在一段时间内保持打开状态,它们会在这段时间内占用资源。占用过多就会影响性能。
vim /usr/local/nginx/conf/nginx.conf
? ? ? ? ?增加请求头 和 请求体
? ? ? ? ? ? ?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值。这个头能够让一些浏览器主动关闭连接,这样服务器就不必去关闭连接了。没有这个参数,Nginx 不会发送 Keep-Alive 响应头。?
?client_header_timeout? ?客户端向服务端发送一个完整的 request header 的超时时间。如果客户端在指定时间内没有发送一个完整的 request header,Nginx 返回 HTTP 408(Request Timed Out)。?
?client_body_timeout? ?指定客户端与服务端建立连接后发送 request body 的超时时间。如果客户端在指定时间内没有发送任何内容,Nginx 返回 HTTP 408(Request Timed Out)。
六、更改进程数
查看cpu核数
cat /proc/cpuinfo | grep -c "physical"
?查看nginx主进程中包含几个子进程
vim /usr/local/nginx/conf/nginx.conf
worker_processes 2; #修改为核数相同或者2倍
worker_cpu_affinity 01 10; #设置每个进程由不同cpu处理,进程数配2 4 6 8分别为0001 0010 0100 1000
?重启 查看
?ps:01表示启用第一个CPU内核,10表示启用第二个CPU内核 worker cpu affinity 0110;表示开启两个进程,第一个进程对应着第一个CP U内核,第二个进程对应着第二个CPU内核。 ###2核cpu,开启4个进程 worker processes 4;? worker cpu affinity 01 10 01 10; PS:开启了四个进程,它们分别对应着开启2个CPU内核 ###4个cpu,开启4个进程 worker processes 4;? worker cpu affinity 0001 0010 0100 1000; Ps:0001表示启用第一个CPU内核,0010表示启用第二个CPU内核,依此类推 ?
七、网页压缩?
Nginx的ngx_http_gzip_module压缩模块提供对文件内容压缩的功能,允许Nginx服务器将输出内容在发送客户端之前进行压缩,以节约网站带宽,提升用户的访问体验,默认已经安装可在配置文件中加入相应的压缩功能参数对压缩性能进行优化
vim /usr/local/nginx/conf/nginx.conf
http {
......
gzip on; #取消注释,开启gzip压缩功能
gzip_min_length 1k; #最小压缩文件大小
gzip_buffers 4 64k; #压缩缓冲区,大小为4个64k缓冲区
gzip_http_version 1.1; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
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; #压缩类型,表示哪些网页文档启用压缩功能
......
}
??cd /usr/local/nginx/html 先将1.jpg文件传到/usr/local/nginx/html目录下
cd /usr/local/nginx/html
先将game.jpg文件传到/usr/local/nginx/html目录下
vim index.html
......
<img src="game.jpg"/> #网页中插入图片
</body>
</html>
systemctl restart nginx
?Linux系统中,打开火狐浏览器,按F12,然后按F5 选择 网络 —> 选择 HTML、WS、其他 访问 http://192.168.111.100?,双击200响应消息查看响应头中包含 Content-Encoding: gzip
?八、盗链与防盗链
1、配置防盗链
源服务器配置
cd /usr/local/nginx/html
rz -E #插入两张图片
ls #查看图片
111.jpg 222.jpg 50x.html error.png index.html
?编辑页面vim index.html
<p><em>Thank you for using nginx</em></p>
<img src=111.jpg /> #插入图片格式
<img src=/>
</body>
</html>
??添加地址映射 编辑配置文件vim /etc/hosts
?2 配置盗链机
cd /usr/local/nginx/html
vim index.html
......
<img src="http://www.zyy1.com/111.jpg"/>
</body>
</html>
3 源主机防盗链设置? ?(注意!!!报错图片格式最好和之前插入页面的图片格式不同
vim /usr/local/nginx/conf/nginx.conf
server
{
......
location ~* \.(gif|jpg|swf)$ {
valid_referers none blocked *.zyf.com zyf.com;
if ($invalid_referer) {
rewrite ^/ http://www.zyy1.com/222.png; #盗链跳转到另一个界面
}
}
.......
}
?验证
在192.168.111.100主机网页中搜索www.zyy1.com 结果正确输出111.jpg
?用192.168.111.90主机网页搜索www.zyy1.com 结果正确输出111.jpg
用192.168.111.100访问www.zyy.com显示出防盗提示错误页面
九、Nginx监控模块简介
1、监控Nginx主要用到以下三个模块 nginx-module-vts:Nginx virtual host traffic status module,Nginx的监控模块,能够提供JSON格式的数据产出。 2、nginx-vts-exporter:Simple server that scrapes Nginx vts stats and exports them via HTTP for Prometheus consumption。主要用于收集Nginx的监控数据,并给Prometheus提供监控接口,默认端口号9913。 3、Prometheus:监控Nginx-vts-exporter提供的Nginx数据,并存储在时序数据库中,可以使用PromQL对时序数据进行查询和聚合。 nginx中的vts模块是非常好用的一款监控模块,能让我们清晰的观测到服务器当下状态。 ?
1.关闭防火墙,关闭核心防护!!
?2. 上传解压nginx安装包
tar -zxvf nginx-1.22.0.tar.gz
unzip nginx-module-vts-master.zip
mv nginx-module-vts-master /usr/local
3.搭建Nginx?
1 yum -y install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel make
useradd -M -s /sbin/nologin nginx
#创建用户是为了让nginx更灵活,赋予更多的权限
2 ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --add-module=/opt/nginx-module-vts-master/
3 make && make install
4 ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
5 nginx -t
4、修改配置文件?
vim /usr/local/nginx/conf/nginx.conf #配置文件如下
6、http下插入以下内容
log_format main '{ "@timestamp": "$time_local", '
'"@fields": { '
'"uri":"$request_uri",'
'"url":"$uri",'
'"upstream_addr":"$upstream_addr",'
'"remote_addr": "$remote_addr", '
'"remote_user": "$remote_user", '
'"body_bytes_sent": "$body_bytes_sent", '
'"host":"$host",'
'"server_addr":"$server_addr",'
'"request_time": "$request_time", '
'"request_time":"$request_time",'
'"status":"$status",'
'"request": "$request", '
'"request_method": "$request_method", '
'"size":$body_bytes_sent,'
'"upstream_time":"$upstream_response_time"'
'"http_referrer": "$http_referer", '
'"body_bytes_sent":"$body_bytes_sent", '
'"http_x_forwarded_for": "$http_x_forwarded_for", '
'"http_user_agent": "$http_user_agent" } }';
?
7、在location下再加一个location
location / {
root html;
index index.html index.htm;
}
location /status {
vhost_traffic_status_display;
vhost_traffic_status_display_format html;
}
8、重启nginx 服务
9、 查看监控
?
监控列表各项信息
Server main 主服务器
**Host:**主机名
**Version:**版本号
**Uptime:**服务器运行时间
Connections active:当前客户端的连接数 reading:读取客户端连接的总数 writing:写入客户端连接的总数
Requsts accepted:接收客户端的连接总数 handled:已处理客户端的连接总数 Total:请求总数 Req/s:每秒请求的数量
Shared memory:共享内存 name:配置中指定的共享内存名称 maxSize:配置中指定的共享内存的最大限制 usedSize:共享内存的当前大小 usedNode:共享内存中当前使用的节点数
Server zones 服务器区域
zone:当前区域
Requests Total:请求总数 Req/s:每秒请求数 time:时间
Responses:状态码数量 1xx、2xx、3xx、4xx、5xx:表示响应不同状态码数量 Total:响应状态码的总数
Traffic表示流量 Sent:发送的流量 Rcvd:接收的流量 Sent/s:每秒发送的流量 Rcvd/s:每秒接收的流量
Cache表示缓存 Miss:未命中的缓存数 Bypass:避开的缓存数 Expirde:过期的缓存数 Stale:生效的缓存数 Updating:缓存更新的次数 Revalidated:重新验证的缓存书 Hit:缓存命中数 Scarce:未达缓存要求的请求次数Total:总数
|