From 4af48a519dfa16157ea0dc63e05a3cfe8a5177f8 Mon Sep 17 00:00:00 2001 From: Mr Chen Date: Thu, 20 Dec 2018 13:27:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=81=E9=87=8F=E6=8E=A7=E5=88=B6=E5=8A=9F?= =?UTF-8?q?=E8=83=BDok?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- class/core/site_api.py | 94 +++++++++++++++++++++++++++++++++++++++- route/site.py | 21 +++++++++ static/app/site.js | 98 +++++++++++++++++++++--------------------- 3 files changed, 162 insertions(+), 51 deletions(-) diff --git a/class/core/site_api.py b/class/core/site_api.py index 1a38dccb6..1e0949b53 100755 --- a/class/core/site_api.py +++ b/class/core/site_api.py @@ -65,6 +65,12 @@ class site_api: return path[0:-1] return path + def getHostConf(self, siteName): + return public.getServerDir() + '/openresty/nginx/conf/vhost/' + siteName + '.conf' + + def getIndexConf(self): + return public.getServerDir() + '/openresty/nginx/conf/nginx.conf' + def list(self): _list = public.M('sites').where('', ()).field( 'id,name,path,status,ps,addtime,edate').limit('0,5').order('id desc').select() @@ -129,8 +135,92 @@ class site_api: public.writeLog('TYPE_SITE', 'SITE_INDEX_SUCCESS', (siteName, index_l)) return public.returnJson(True, '设置成功!') - def getHostConf(self, siteName): - return public.getServerDir() + '/openresty/nginx/conf/vhost/' + siteName + '.conf' + def getLimitNet(self, sid): + siteName = public.M('sites').where("id=?", (sid,)).getField('name') + filename = self.getHostConf(siteName) + # 站点总并发 + data = {} + conf = public.readFile(filename) + try: + rep = "\s+limit_conn\s+perserver\s+([0-9]+);" + tmp = re.search(rep, conf).groups() + data['perserver'] = int(tmp[0]) + + # IP并发限制 + rep = "\s+limit_conn\s+perip\s+([0-9]+);" + tmp = re.search(rep, conf).groups() + data['perip'] = int(tmp[0]) + + # 请求并发限制 + rep = "\s+limit_rate\s+([0-9]+)\w+;" + tmp = re.search(rep, conf).groups() + data['limit_rate'] = int(tmp[0]) + except: + data['perserver'] = 0 + data['perip'] = 0 + data['limit_rate'] = 0 + + return public.getJson(data) + + def checkIndexConf(self): + limit = self.getIndexConf() + nginxConf = public.readFile(limit) + limitConf = "limit_conn_zone $binary_remote_addr zone=perip:10m;\n\t\tlimit_conn_zone $server_name zone=perserver:10m;" + nginxConf = nginxConf.replace( + "#limit_conn_zone $binary_remote_addr zone=perip:10m;", limitConf) + public.writeFile(limit, nginxConf) + + def saveLimitNet(self, sid, perserver, perip, limit_rate): + + str_perserver = 'limit_conn perserver ' + perserver + ';' + str_perip = 'limit_conn perip ' + perip + ';' + str_limit_rate = 'limit_rate ' + limit_rate + 'k;' + + siteName = public.M('sites').where("id=?", (sid,)).getField('name') + filename = self.getHostConf(siteName) + + conf = public.readFile(filename) + if(conf.find('limit_conn perserver') != -1): + # 替换总并发 + rep = "limit_conn\s+perserver\s+([0-9]+);" + conf = re.sub(rep, str_perserver, conf) + + # 替换IP并发限制 + rep = "limit_conn\s+perip\s+([0-9]+);" + conf = re.sub(rep, str_perip, conf) + + # 替换请求流量限制 + rep = "limit_rate\s+([0-9]+)\w+;" + conf = re.sub(rep, str_limit_rate, conf) + else: + conf = conf.replace('#error_page 404/404.html;', "#error_page 404/404.html;\n " + + str_perserver + "\n " + str_perip + "\n " + str_limit_rate) + + public.writeFile(filename, conf) + public.restartWeb() + public.writeLog('TYPE_SITE', 'SITE_NETLIMIT_OPEN_SUCCESS', (siteName,)) + return public.returnJson(True, '设置成功!') + + def closeLimitNet(self, sid): + siteName = public.M('sites').where("id=?", (sid,)).getField('name') + filename = self.getHostConf(siteName) + conf = public.readFile(filename) + # 清理总并发 + rep = "\s+limit_conn\s+perserver\s+([0-9]+);" + conf = re.sub(rep, '', conf) + + # 清理IP并发限制 + rep = "\s+limit_conn\s+perip\s+([0-9]+);" + conf = re.sub(rep, '', conf) + + # 清理请求流量限制 + rep = "\s+limit_rate\s+([0-9]+)\w+;" + conf = re.sub(rep, '', conf) + public.writeFile(filename, conf) + public.restartWeb() + public.writeLog( + 'TYPE_SITE', 'SITE_NETLIMIT_CLOSE_SUCCESS', (siteName,)) + return public.returnJson(True, '已关闭流量限制!') def addDomain(self, domain, webname, pid): pass diff --git a/route/site.py b/route/site.py index d9017fe43..4a9069494 100644 --- a/route/site.py +++ b/route/site.py @@ -53,6 +53,27 @@ def setIndex(): return site_api.site_api().setIndex(sid, index) +@site.route('get_limit_net', methods=['POST']) +def getLimitNet(): + sid = request.form.get('id', '').encode('utf-8') + return site_api.site_api().getLimitNet(sid) + + +@site.route('save_limit_net', methods=['POST']) +def saveLimitNet(): + sid = request.form.get('id', '').encode('utf-8') + perserver = request.form.get('perserver', '').encode('utf-8') + perip = request.form.get('perip', '').encode('utf-8') + limit_rate = request.form.get('limit_rate', '').encode('utf-8') + return site_api.site_api().saveLimitNet(sid, perserver, perip, limit_rate) + + +@site.route('close_limit_net', methods=['POST']) +def closeLimitNet(): + sid = request.form.get('id', '').encode('utf-8') + return site_api.site_api().closeLimitNet(sid) + + @site.route('get_logs', methods=['POST']) def getLogs(): siteName = request.form.get('siteName', '').encode('utf-8') diff --git a/static/app/site.js b/static/app/site.js index 2ee74b490..eb9be27af 100755 --- a/static/app/site.js +++ b/static/app/site.js @@ -1013,7 +1013,7 @@ function webEdit(id,website,endTime,addtime){ +"

"+lan.site.site_menu_4+"

" +"

默认文档

" +"

"+lan.site.site_menu_6+"

" - +"

"+lan.site.site_menu_7+"

" + +"

"+lan.site.site_menu_7+"

" +"

"+lan.site.site_menu_8+"

" +"

"+lan.site.site_menu_10+"

" +"

"+lan.site.site_menu_11+"

" @@ -1186,7 +1186,7 @@ function UpdateRulelist(){ //流量限制 function limitNet(id){ - $.post('site?action=GetLimitNet&id='+id,function(rdata){ + $.post('/site/get_limit_net','id='+id, function(rdata){ var status_selected = rdata.perserver != 0?'checked':''; if(rdata.perserver == 0){ rdata.perserver = 300; @@ -1201,12 +1201,12 @@ function limitNet(id){ +"" +"" var body = "
" - +'

' + +'

' +"

"+lan.site.limit_net_9+":

" +"

"+lan.site.limit_net_10+":

" +"

"+lan.site.limit_net_12+":

" +"

"+lan.site.limit_net_14+":

" - +"" + +"" +"
" +"" $("#webedit-con").html(body); @@ -1259,28 +1259,28 @@ function limitNet(id){ $("input[name='perip']").val(perip); $("input[name='limit_rate']").val(limit_rate); }); - }); + },'json'); } //保存流量限制配置 -function SaveLimitNet(id,type){ +function saveLimitNet(id, type){ var isChecked = $("input[name='status']").attr('checked'); - if(isChecked == undefined || type == 1){ + if(isChecked == undefined || type == 1 ){ var data = 'id='+id+'&perserver='+$("input[name='perserver']").val()+'&perip='+$("input[name='perip']").val()+'&limit_rate='+$("input[name='limit_rate']").val(); var loadT = layer.msg(lan.public.config,{icon:16,time:10000}) - $.post('site?action=SetLimitNet',data,function(rdata){ + $.post('/site/save_limit_net',data,function(rdata){ layer.close(loadT); limitNet(id); layer.msg(rdata.msg,{icon:rdata.status?1:2}); - }); + },'json'); }else{ var loadT = layer.msg(lan.public.config,{icon:16,time:10000}) - $.post('site?action=CloseLimitNet&id='+id,function(rdata){ + $.post('/site/close_limit_net',{id:id},function(rdata){ layer.close(loadT); limitNet(id); layer.msg(rdata.msg,{icon:rdata.status?1:2}); - }); + },'json'); } } @@ -1535,10 +1535,10 @@ function set_cert_ssl(certName,siteName){ } //宝塔ssl -function SetSSL(id,siteName){ +function setSSL(id,siteName){ var mBody = '
\ - '+lan.site.bt_ssl+'\ - Let\'s Encrypt\ + '+lan.site.bt_ssl+'\ + Let\'s Encrypt\ '+lan.site.other_ssl+'\ '+lan.public.close+'\ 证书夹' @@ -1556,36 +1556,36 @@ function SetSSL(id,siteName){ $(".tab-nav span").click(function(){ $(this).addClass("on").siblings().removeClass("on"); }); - var loadT = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']}); - $.post('site?action=GetSSL','siteName='+siteName,function(rdata){ - layer.close(loadT); - $("#toHttps").attr('checked',rdata.httpTohttps); - switch(rdata.type){ - case -1: - $(".tab-nav span").eq(3).addClass("on").siblings().removeClass("on"); - var txt = "
"+lan.site.ssl_help_1+"
"; - $(".tab-con").html(txt); - break; - case 1: - $(".tab-nav span").eq(1).addClass("on").siblings().removeClass("on"); - setCookie('letssl',1); - var lets = '
'+lan.site.ssl_key+'
' - + '
'+lan.site.ssl_crt+'
' - + '
' - + '' - $(".tab-con").html(lets); - $(".help-info-text").after("
"); - break; - case 0: - $(".tab-nav span").eq(2).addClass("on").siblings().removeClass("on"); - BTssl('other',id,siteName); - break; - case 2: - $(".tab-nav span").eq(0).addClass("on").siblings().removeClass("on"); - BTssl('a',id,siteName); - break; - } - }) + // var loadT = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']}); + // $.post('/site?action=GetSSL','siteName='+siteName,function(rdata){ + // layer.close(loadT); + // $("#toHttps").attr('checked',rdata.httpTohttps); + // switch(rdata.type){ + // case -1: + // $(".tab-nav span").eq(3).addClass("on").siblings().removeClass("on"); + // var txt = "
"+lan.site.ssl_help_1+"
"; + // $(".tab-con").html(txt); + // break; + // case 1: + // $(".tab-nav span").eq(1).addClass("on").siblings().removeClass("on"); + // setCookie('letssl',1); + // var lets = '
'+lan.site.ssl_key+'
' + // + '
'+lan.site.ssl_crt+'
' + // + '
' + // + '' + // $(".tab-con").html(lets); + // $(".help-info-text").after("
"); + // break; + // case 0: + // $(".tab-nav span").eq(2).addClass("on").siblings().removeClass("on"); + // BTssl('other',id,siteName); + // break; + // case 2: + // $(".tab-nav span").eq(0).addClass("on").siblings().removeClass("on"); + // BTssl('a',id,siteName); + // break; + // } + // }); } //关闭SSL function closeSSL(siteName){ @@ -1919,7 +1919,7 @@ function VerifyDomain(partnerOrderId,siteName){ } //旧的设置SSL -function SetSSL_old(siteName){ +function setSSL_old(siteName){ var loadT = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']}); $.post('site?action=GetSSL','siteName='+siteName,function(rdata){ layer.close(loadT); @@ -1986,7 +1986,7 @@ function OcSSL(action,siteName){ if(!rdata.status){ if(!rdata.out){ layer.msg(rdata.msg,{icon:rdata.status?1:2}); - //SetSSL(siteName); + //setSSL(siteName); return; } @@ -2004,7 +2004,7 @@ function OcSSL(action,siteName){ setCookie('letssl',0); $.post('/system?action=ServiceAdmin','name='+getCookie('serverType')+'&type=reload',function(result){ - //SetSSL(siteName); + //setSSL(siteName); if(!result.status) layer.msg(result.msg,{icon:2}); }); layer.msg(rdata.msg,{icon:rdata.status?1:2}); @@ -2036,7 +2036,7 @@ function newSSL(siteName,domains){ if(!rdata.out){ layer.msg(rdata.msg,{icon:rdata.status?1:2}); - //SetSSL(siteName); + //setSSL(siteName); return; } @@ -2053,7 +2053,7 @@ function newSSL(siteName,domains){ function SaveSSL(siteName){ var data = 'type=1&siteName='+siteName+'&key='+encodeURIComponent($("#key").val())+'&csr='+encodeURIComponent($("#csr").val()); var loadT = layer.msg(lan.site.saving_txt,{icon:16,time:20000,shade: [0.3, '#000']}) - $.post('site?action=SetSSL',data,function(rdata){ + $.post('site?action=setSSL',data,function(rdata){ layer.close(loadT); if(rdata.status){ layer.msg(rdata.msg,{icon:1});