运维三 nginx 代理服务

运维三 负载均衡 轮询 加权 iphash 初步优化 更新模块

前日补充

rewirte选项表格

选项说明
redirect临时修改地址值给用户看 状态码302
permanent永久修改 状态码301 帮助爬虫???
last不在读其他rewrite 相同作用块中 如果一个在server全局作用块中 另一个在location作用块中
break不在读其他语句,结束请求 相同作用块中
设置选项后查看日志
tail -3 /usr/local/nginx/logs/access.log   #设置redirect后浏览器访问后
										#rewrite ^/a.html$  /b.html redirect;
192.168.2.1 - - [11/Dec/2020:04:40:57 -0500] "GET /a.html HTTP/1.1" 302 145 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0"            #302 重定向开始                      
192.168.2.1 - - [11/Dec/2020:04:40:57 -0500] "GET /b.html HTTP/1.1" 200 11 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0"			#200 地址成功被重写
192.168.2.1 - - [11/Dec/2020:04:40:57 -0500] "GET /favicon.ico HTTP/1.1" 404 153 "http://192.168.2.5/b.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0"   #404  找不到图标  测试网页当然没有


tail -3 /usr/local/nginx/logs/access.log   #浏览器访问后
										#rewrite ^/a.html$  /b.html permanent;

192.168.2.1 - - [11/Dec/2020:04:45:49 -0500] "GET /a.html HTTP/1.1" 301 169 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0"                          #301 permanent  重定向开始
192.168.2.1 - - [11/Dec/2020:04:45:49 -0500] "GET /b.html HTTP/1.1" 200 11 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0"							#200 地址成功被重写
192.168.2.1 - - [11/Dec/2020:04:45:49 -0500] "GET /favicon.ico HTTP/1.1" 404 153 "http://192.168.2.5/b.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0"
									#404 同上

前日错误修改
vim /usr/local/nginx/conf/nginx.conf
#========================================
	server {
		rewrite /a.html /b.html;
		rewrite /b.html /c.html;
		#并非昨日匹配即停止,如果输入/a.html会变成/c.html
		#昨天测试用的同样的匹配条件  所以不会修改后匹配了。。。。
		#这时候last选项的作用就出来了
		
		
		rewrite /d.html   /e.html last;  #重写为/e.html之后不会匹配下面这条
		rewrite /e.html   /f.html;     #不会导致重写两次
		#前提是在同一个作用域块内   如果两条分别放到location块中  last就失效了~~~~~~~
		#本质就是last的作用范围只在最近的作用块中
	}
#=========================================
重写过程分析(redirect选项)
  1. 用户用浏览器发送修改前的地址给nginx服务器
  2. nginx服务器发送回302页面及修改后的地址给用户浏览器
  3. 浏览器根据修改后的地址又请求新页面
  4. nginx服务器返回新页面给用户,浏览器显示
总结
  • 至少两次数据交互
curl 192.168.2.5/a.html   #配置文件中为 rewrite /a.html /b.html redirect
<html>
<head><title>302 Found</title></head>
<body>
<center><h1>302 Found</h1></center>
<hr><center>nginx/1.17.6</center>
</body>
</html>
#返回的文本是302页面     因为curl并没有第二次发送数据功能  只能接受一次估计, redirect是要回显修改后的地址给用户的 
重写过程分析(无选项)
  1. 用户用浏览器发送修改前的地址给nginx服务器
  2. nginx服务器就地(处理掉修改地址)
  3. 返回处理掉的地址网页给用户
  4. 用户显示“新页面”网页地址不变
总结
  • 大概一次数据交互
 											#配置文件中为rewrite /a.html /b.html
[root@hahaha conf]# curl 192.168.2.5/a.html
nginx B~~~
#这次就显示了

nginx反向代理

反向代理举例(nginx反向代理格式 负载均衡weght max_fails fail_timeout down等)
轮询
#前置  有两台提供http服务的服务器
vim /usr/local/nginx/conf/nginx.conf
#=====================================
	http {
		upstream my_first_colony {   #定义源服务器组
			server 192.168.2.100:80;  #定义服务器ip和服务端口
			server 192.168.2.200:80;
		}
		server {
			listen 80;
			server_name localhost;
			location / {
				.....
				proxy_pass http://my_first_*colony;  #调用服务组
			}
		}
	}
#======================================

/usr/local/nginx/sbin/nginx -s reload  #重启服务
 
[root@proxy conf]# curl 192.168.2.5   #访问
httpd_web1~~~~~                         #192.168.2.100:80服务http
[root@proxy conf]# curl 192.168.2.5  
httpd_web2 ~~~~~                        #192.168.2.200:80服务http
[root@proxy conf]# curl 192.168.2.5
httpd_web1~~~~~
[root@proxy conf]# curl 192.168.2.5
httpd_web2 ~~~~~

#####默认轮询分担  只定义了2.100:80 2.200:80两台  所以就两台轮询
加权轮询
#加权轮询
vim /usr/local/nginx/conf/nginx.conf
#=================================
	http {
		upstream my_first_colony {  #加权轮询
			server 192.168.2.100:80 weight=2;
			server 192.168.2.200:80;
		}
	}
#=================================

/usr/local/nginx/sbin/nginx -s reload

[root@proxy conf]# curl 192.168.2.5
httpd_web1~~~~~
[root@proxy conf]# curl 192.168.2.5
httpd_web1~~~~~
[root@proxy conf]# curl 192.168.2.5
httpd_web2 ~~~~~
[root@proxy conf]# curl 192.168.2.5
httpd_web1~~~~~
[root@proxy conf]# curl 192.168.2.5
httpd_web1~~~~~
[root@proxy conf]# curl 192.168.2.5
httpd_web2 ~~~~~

#########可以发现服务器提供服务的比例为 2 : 1  因为设置了192.168.2.80 权重为2  192.168.2.200:80权重默认为1
健康检查功能
#=====================================
	http {
		upstream my_first_colony {
			server 192.168.2.100:80 max_fails= 2 fail_timeout=30;
			#max_fails  检测两次如果失败就认为该服务器挂了,等30秒后再检测
			server 192.168.1.200:80;
		}
	}
#=====================================
#口述测试
#2.100挂了之后  服务一直由2.200提供   30秒之后(2.100在这段时间恢复了) 服务正常继续了
关闭服务器
#=====================================
	http {
		upstream my_first_colony {
			server 192.168.2.100:80 down;
			server 192.168.1.200:80;
		}
	}
#=====================================
#直白告诉nginx代理服务器2.100不能用了
ip_hash
#===================================
	http {
		upstream my_first_colony {
			ip_hash;     #ip_hash方式调度   每个Ip客户端都会提供到专属服务器上   session不用共享了  但是维护比较麻烦
			server 192.168.2.100:80;
			server 192.168.2.200:80;
		}
	}
#===================================
提供其他服务集群(ssh)
./configure --prefix=/usr/local/nginx --user=nginx --with-http_ssl_module --with-stream --with-http_stub_status_module
#stream 支持四层代理  可以让nginx组建其他业务(非web)的集群
#http_stub_status_module    可以查看网站后台数据
make
#可以将重新生成的二进制文件objs目录下的nginx替换掉旧的
cp objs/nginx /usr/local/nginx/sbin/nginx
yes      #覆盖  最好先备份

vim /usr/local/nginx/conf/nginx.conf
===================================
event {

}
stream {#创建新业务
	upstream my_not_web_daemon {#创建新集群
		server 192.168.2.100:22;  #22端口提供服务  默认是ssh服务
		server 192.168.2.200:22;
	}
	server {
		listen 12345; #将新的监听新端口
		proxy_pass my_not_web_daemon;
	}
}
http {

}
=====================================
nginx      #启动
ssh 192.168.2.5 -p 12345  #访问nginx代理服务器的12345端口
#成功进入192.168.2.100的ssh的服务中

rm -rf ~/.ssh/known_hosts  #删除记录  排除干扰
ssh 192.168.2.5 -p 12345    #继续测试轮询  
#成功进入192.168.2.200的ssh的服务     轮询
报错页面替换
vim /usr/local/nginx/conf/nginx.conf
#========================================
http {
	server{
		listen 80;
		server_name localhost;
		
		error_page  404     /notfind.html   #自己的notfind.html放到html目录下
	}
}
#========================================
查看后台数据(很重要)
vim /usr/local/nginx/conf/nginx.conf
#====================================
	server {
		location /status {
			stub_status on; #显示后台数据
			allow 192.168.2.5;#运行2.5ip地址访问
			deny all;#拒绝所有
		}
	}
#======================================
/usr/local/nginx/sbin/nginx -s reload

curl 192.168.2.5/status             #查看网站后台数据  http_stub_status_module模块提供
Active connections: 2           #当前活动的连接数量,体现了多少用户正在访问网站
server accepts handled requests   
	#accepts已经处理客户端连接 handled服务器给回客户端的次数 request请求数
 5 5 4
Reading: 0 Writing: 1 Waiting: 1 
#服务器正在读取客户端请求头数量   回应数据数      正在等待服务器响应的客户端数量   

配置nginx缓存功能
vim /usr/local/nginx/conf/nginx.conf
#===========================================
	server{
		location ~* \.(jpg|html|mp4|PNG)$ {
			expires 30; #缓存在客户机上30天
		}
	}
#=============================================

nginx调优

414处理
  • 414 URL过长
vim longlongurl.sh
#========================================#产生个超长的url并访问
#!/bin/bash
URL=http://192.168.4.5/index.html?
for i in {1..5000}
do
        URL=${URL}v$i=$i
done
curl $URL
#========================================
bash  longlongurl.sh
<html>
<head><title>414 Request-URI Too Large</title></head>
<body>
<center><h1>414 Request-URI Too Large</h1></center>
<hr><center>nginx/1.17.6</center>
</body>
</html>
					#414错误  网站不太行
vim /usr/local/nginx/conf/nginx.conf     #马上改
#=======================================
http {
	
	client_header_buffer_size 200k;#增加到200k
	large_client_header_buffers 4 200k;#还不够 来4个200k
									#还不够 建议解决提出问题的人
	server {
	
	}
}
#========================================
/usr/local/nginx/sbin/nginx -s reload
bash longlongurl.sh
#414消失了

ss命令

选项说明
-a显示所有端口的信息
-n以数字格式显示端口号
-t显示TCP连接的端口
-u显示UDP连接的端口
-l显示服务正在监听的端口信息
-p显示监听端口的服务名称是什么

RHEL7中可以用ss来替代netstat命令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值