今天阅读老男孩教育博客http://oldboy.blog.51cto.com/ 中一篇关于shell实现nginx反向代理后端realserver健康检查的文章,根据其中一个学员朋友的思路自己写了一个脚本。
一、nginx.conf部分内容如下:
upstream rs_pools {
server 10.0.0.8:80 weight=5;
server 10.0.0.9:80 weight=5;
server 10.0.0.10:80 weight=5;
}
server {
location / {
proxy_pass http://rs_pools;
}
}二、脚本如下:
#!/bin/bash
NginxConfigPath=/application/nginx/conf
NginxConfigFile=nginx.conf
NginxCheckPath=/application/nginx/html
NginxCheckFile=nginx_check.html
#通过sed和awk获取realserver的IP地址,以数组保存
rs_list=(`sed -n ‘/upstream/{:a;N;/}/!ba;p}‘ ${NginxConfigPath}/${NginxConfigFile} | awk -F "[ :]+" ‘/server/{print $2}‘`)
#生成html主体部分的上半部分,并生成表格的第一行
function html_static(){
cat >> ${NginxCheckPath}/${NginxCheckFile}<<EOF
<html>
<meta http-equiv="refresh" content="2">
<!-- html==>define html file-->
<body background="bg.jpg">
<!-- body==>define html file‘s body-->
<hr />
<!-- hr==>Create horizon line-->
<h1 align="center">Nginx Proxy Healthy Check</h1>
<!-- h1==>define the title,title range <1-6>-->
<hr />
<table width="700" border="1" align="center">
<tr bgcolor="green">
<td align="center">Server_ID</td>
<td align="center">Server_Type</td>
<td align="center">Server_IP</td>
<td align="center">Server_status</td>
</tr>
EOF
}
#生成html主体的后半部分
function html_tail(){
cat >> ${NginxCheckPath}/${NginxCheckFile}<<EOF
</table>
</body>
</html>
EOF
}
#生成表格的一行
function table_line(){
cat >> ${NginxCheckPath}/${NginxCheckFile}<<EOF
<tr bgcolor="$1"> #背景颜色
<td align="center">$2</td> #Server_ID
<td align="center">$3</td> #Server_Type
<td align="center">$4</td> #Server_Ip
<td align="center">$5</td> #Server_Status
</tr>
EOF
}
function check_rs(){
for ((i=0;i<${#rs_list[*]};i++))
do
#获取realserver的服务类型是apache还是nginx
Server_Type=`curl -I -s ${rs_list[$i]} | awk -F "[ /]" ‘/Server:/{print $2}‘`
#获取realserver返回的状态码
HTTP_CODE=`curl -I -s -w "%{http_code}\n" -o /dev/null ${rs_list[$i]}`
if [ $HTTP_CODE -eq 200 -o $HTTP_CODE -eq 301 ]
then
#如果返回200或者301,调用table_line函数,动态生成每一行检测记录
table_line green $i ${Server_Type} ${rs_list[$i]} UP
else
table_line red $i UnKnown ${rs_list[$i]} DOWN
fi
done
}
#主函数
function main(){
while true
do
html_static #生成html主体前面部分
check_rs #动态生成检测realserver的一行,并追加到html文件
html_tail #把html主题的后面部分追加到html文件
sleep 2 #检测时间间隔
>${NginxCheckPath}/${NginxCheckFile} #每次检测后清空html文件,下次检测再循环生成html文件
done
}
main #执行主函数正常状态效果如下:
仓促完成,有不对之处,请指出!!!
本文出自 “迷失在Linux” 博客,请务必保留此出处http://zihang.blog.51cto.com/158746/1914953
分析shell实现nginx反向代理后端realserver健康检查
原文:http://zihang.blog.51cto.com/158746/1914953