4.Nginx优化,谁用谁说好

编程之家收集整理的这篇文章主要介绍了4.Nginx优化,谁用谁说好编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率,受益者不提供资源或提供很少的资源,而真正的服务提供商却得不到任何的收益测试配置所需环境盗链端http服务端nginx。...,下方主要介绍关于4.Nginx优化,谁用谁说好的全文内容,希望对你有所帮助。

一,Nginx优化

1.隐藏版本号

  • 在生产环境中,需要隐藏 Nginx 版本号,以避免泄露 Nginx 的版本,使攻击者不能针对特定版本进行攻击

1.1 查看版本号

  • 网页查看
    f12–>网络–> ctrl+r–>选择请求–>标头

image-20220721141404047

[root@server2 conf]# curl -I http://192.168.113.128
http/1.1 200 OK
Server: Nginx/1.22.0

image-20220721141520271

1.2 隐藏版本号

[[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									#隐藏成功

image-20220721142406965

image-20220721142539911

[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   				#成功

image-20220721143659177

image-20220721143804451

2. 修改用户与组

2.1 编译时指定用户和组

./configure --prefix=/usr/local/Nginx --user=Nginx --group=Nginx

2.2 修改配置文件

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

3. 配置网页缓存时间

3.1 修改配置文件

  1. 在新的 location 段加入 expires 参数,指定缓存的时间,1d表示一天(若设置1.5天可指定为1d12h)
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天
        }
......

image-20220721145600456

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

image-20220721150800540

4. 日志切割

4.1编写脚本进行日志切割

  1. 设置时间变量
  2. 设置保存日志路径
  3. 将目前的日志文件进行重命名
  4. 重建新日志文件
  5. 删除时间超过30天的日志文件
  6. 设置cron任务,定期执行脚本自动进行日志分割
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	

4.2 测试脚本

[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

4.3 设置 crontab 任务,定期执行脚本自动进行日志分割

[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<用户名>:指定要设定计时器的用户名

5.设置连接超时

http一个KeepAlive摸式,它告诉web服务器在处理完一个请求后保持这个TcP连接的打开状态,若接收到来自同一客户端的其它请求,服务端会利用这个未被关闭的连接,而不需要再建立一
个连接。
KeepAlive
在一段时间内保持打开状态,它们会在这时间内占用资源。占用过多就会影响性能

  • 为避免同一客户端长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间

5.1 参数配置

[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;				#等待客户端发送请求体的超时时间
......

image-20220721161931307

keepalive timeout
指定KeepAlive的超时时间(timeout)。指定每个TcP连接最多可以保持多长时间服务器将会在这时间关闭连接。Nginx认值是65秒,有些浏览器最多只保持60秒,所以可以设定为60秒。若将它设置为0,就禁止了keepalive连接。

第二个参数(可选的)指定了在响应头Keep-Alive:timeout=time中的time值。这个头能够让些浏览器主动关闭连接,这样服务器就不必去关闭连接了。没有这个参数,Ngix不会发送Keep-Alive响应头。

二、Nginx深入优化

1.更改进程数

  • 在高并发环境中,需要启动更多的 Nginx 进程以保证快速响应,用以处理用户的请求,避免造成阻塞
#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内核,以此类推

image-20220721163413334

  • 参数设置为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性能最大化。

image-20220721164932024

2. 配置网页压缩

2.1 压缩功能参数

[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;

image-20220722145349662

2.2 上传图片到 /usr/local/Nginx/HTML 目录

[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

image-20220722161936882

image-20220722161719946

3.盗链与防盗链

  • 盗链是一种恶意行为,在互联网上广泛存在;在企业网站中,一般都要配置防盗链功能,以避免网站内容被非法盗用,造成经济损失,也避免不必要的带宽浪费

3.1 盗链概述

盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率,受益者不提供资源或提供很少的资源,而真正的服务提供商却得不到任何的收益

盗链端http: 192.168.113.129
服务端Nginx:192.168.113.128 

3.2防盗链配置文件原理

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,jpg这个请求是从http:Lwww,com这个链接过来的。

  • blocked:允许不是http:/开头的,不带协议的请求访问资源;

  • *.kgc.com:只允许来自指定域名的请求访问资源,如http:Lwww.kgc,com

  • if语句:如果链接的来源域名不在valID referers.所列出的列表中,invalID referer.为true,则执行后而的操作,即进行重写

  • 或返回403页面

1.未开启防盗链

使用另外一台服务器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  

image-20220723175838148

image-20220723180029486

#在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

验证:占用的是源主机的资源

image-20220723181349834

3.3开启防盗链

编辑配置文件
注意:因为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

image-20220723181739991

image-20220723181751241

验证:

源主机

image-20220723182146755

盗链网站访问

image-20220723182908237

总结

以上是编程之家为你收集整理的4.Nginx优化,谁用谁说好全部内容,希望文章能够帮你解决4.Nginx优化,谁用谁说好所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

Nginx文章

3分钟搞懂阿里云服务器安装Nginx,并配置访问静态页面!
文章目录前言一、准备工作1、下载需要更新的nginx版本,解压2、编译并make(不进行make install)二、升级方法一1.备份安装目录下的nginx2、复制objs目录下的nginx到当前sbin目录下3、发送信号usr2给nginx老版本对应的进程4、发送信号quit给nginx老版本的进程5、查看是否升级成功三、升级方法二1.备份安装目录下的nginx2、复制objs目录下的nginx到当前sbin目录下3、进入到安装目录,执行make upgrade4、查看是否升级成功总结前言在工作当
需求描述公司为了保证网络安全,所有系统访问网址需要采取https+域名(隐藏端口)的形式进行访问
盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率,受益者不提供资源或提供很少的资源,而真正的服务提供商却得不到任何的收益测试配置所需环境盗链端http服务端nginx。...
史上最诚意满满的事故复盘
掌握nginx中的常见配置,让你更快的熟练应用
视频Nginx 是高性能的 HTTP 和反向代理的服务器,处理高并发能力是十分强大的,能经受高负载的考验,有报告表明能支持高达 50000 个并发连接数。正向代理:需要在客户端配置代理服务器进行指定网站访问反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。​ 客户端发送多个请求到服务器
本文介绍LVS,Nginx,Haproxy这三种负载均衡产品的区别。
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜 "程序精选"关注