21运维原创,转载请注明出处。
由于业务特殊需要,不同的人员需要操作不同站点配置,分配具体权限以后,通过前台web即可实现ng的控制。这里简单写了一个脚本做线上nginx域名的添加以及修改操作。
思路:
管理人员(不同人员具有不同的adminid,权限不一样)登录管理系统,进行web可视化操作,添加或修改域名时,入库到mysql中并触发链接调用的php文件,比如curl http://a.com/add.php,将触发后调用的内容写入adddomain.txt,编写shell通过执行adddomain.txt实现nginx上的配置文件控制。
修改域名也是一个思路,将老域名和新域名输入到txt文件中后,shell截取替换。
添加绑定脚本:
#!/bin/bash
#work: add domain of nginx.site.conf
#date:2017.4.14
#author:21yunwei
objdir=/usr/local/nginx/conf/vhost/
domainlist=/home/yunwei/adddomain.txt
/usr/bin/dos2unix $domainlist
time=`date +%Y%m%d_%H%M%S`
#Domain_List=`cat /home/yunwei/adddomain.txt`
function AddDomain(){
adddomain=`echo $i |awk '{print $1}'`
adminid=`echo $i |awk '{print $2}'`
case ${adminid} in
"10")
objconf=legen.conf
;;
"11")
objconf=apple.conf
;;
"12")
objconf=alien.conf
;;
"13")
objconf=genius.conf
;;
"14")
objconf=test.conf
;;
*)
echo "$adminid not exist"
;;
esac
num=`grep -n "server\_name" ${objdir}${objconf} |awk 'NR==1{print $1}' |awk -F":" '{print $1}'`
sed -i "${num}a server_name ${adddomain};" ${objdir}${objconf}
}
function RestartNginx(){
cp ${objdir}${objconf} ${objdir}${objconf}.old
/usr/local/nginx/sbin/nginx -t >/dev/null 2>&1
ret=$?
if [ $ret -eq 0 ]
then
/usr/local/nginx/sbin/nginx -s reload
else
echo "Change domain error,go back";
rm -f ${objdir}${objconf}
mv ${objdir}${objconf}.old ${objdir}${objconf}
/usr/local/nginx/sbin/nginx -s reload
exit;
fi
}
cat $domainlist | while read i
do
AddDomain $i
RestartNginx
done
cp $domainlist /home/yunwei/domainHistory/$time.txt && echo > $domainlist
说明:1,该脚本并不完善,还有很多可以完善和修改之处,比如删除等操作,这里只提供一个我自己做的简单思路,2,由于web操作过来的是win界面的,txt格式不正确,可以通过cat -A txt文件名查看,需要通过dos2unix进行格式转换,否则脚本截取的参数不正确导致无法正常运行。
替换程序思路:
filename=/home/yunwei/domain.txt
/usr/bin/dos2unix $filename
objdir=/usr/local/nginx/conf/vhost/
oldDomain=`cat $filename | awk 'NR==2{print $1}'`
objconf=`grep -l "$oldDmain" ${objdir}*`
newDomain=`cat $filename | awk 'NR==2{print $2}'`
sed -i "s/$oldDomain/$newDomain/g" $objconf