mirror of
https://github.com/midoks/mdserver-web.git
synced 2026-10-18 23:45:52 +08:00
@@ -195,3 +195,4 @@ plugins/goedge-happy
|
|||||||
/plugins/tools
|
/plugins/tools
|
||||||
/plugins/choose-linux-python
|
/plugins/choose-linux-python
|
||||||
*.md5
|
*.md5
|
||||||
|
/bak
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
[general]
|
||||||
|
# 监听地址和端口
|
||||||
|
listen_addr = "0.0.0.0:8080"
|
||||||
|
|
||||||
|
# DoH 路径
|
||||||
|
path = "/dns-query"
|
||||||
|
|
||||||
|
# TLS 配置(如果需要 HTTPS)
|
||||||
|
# tls_cert_path = "/etc/doh-proxy/cert.pem"
|
||||||
|
# tls_key_path = "/etc/doh-proxy/key.pem"
|
||||||
|
|
||||||
|
# 并发请求限制
|
||||||
|
max_concurrent_requests = 512
|
||||||
|
|
||||||
|
# 日志文件
|
||||||
|
log_file = "{$SERVER_PATH}/doh/doh-proxy.log"
|
||||||
|
|
||||||
|
[upstream]
|
||||||
|
# 上游 DNS 服务器
|
||||||
|
upstream_addr = "1.1.1.1:443"
|
||||||
|
bootstrap_addr = "1.1.1.1:53"
|
||||||
|
|
||||||
|
# 上游 DoH 服务器 URL(如果使用标准的 DoH 端点)
|
||||||
|
# upstream_url = "https://cloudflare-dns.com/dns-query"
|
||||||
|
|
||||||
|
# 超时设置
|
||||||
|
timeout = 10
|
||||||
|
|
||||||
|
# 重试次数
|
||||||
|
tries = 3
|
||||||
|
|
||||||
|
# 启用 TCP 保活
|
||||||
|
tcp_keepalive = 30
|
||||||
|
|
||||||
|
[cache]
|
||||||
|
# 缓存设置
|
||||||
|
max_entries = 65536
|
||||||
|
min_ttl = 60
|
||||||
|
max_ttl = 3600
|
||||||
|
|
||||||
|
[network]
|
||||||
|
# 网络设置
|
||||||
|
tcp_fastopen = true
|
||||||
|
reuse_port = true
|
||||||
|
|
||||||
|
[log]
|
||||||
|
# 日志级别:debug, info, warn, error
|
||||||
|
level = "info"
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 4.3 KiB |
Executable
+26
@@ -0,0 +1,26 @@
|
|||||||
|
<style>
|
||||||
|
.overflow_hide {
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<div class="bt-form">
|
||||||
|
<div class="bt-w-main">
|
||||||
|
<div class="bt-w-menu">
|
||||||
|
<p class="bgw" onclick="pluginService('doh');">服务</p>
|
||||||
|
<p onclick="pluginInitD('doh');">自启动</p>
|
||||||
|
<p onclick="dohRead();">使用说明</p>
|
||||||
|
</div>
|
||||||
|
<div class="bt-w-con pd15">
|
||||||
|
<div class="soft-man-con"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
resetPluginWinHeight(530);
|
||||||
|
$.getScript( "/plugins/file?name=doh&f=js/doh.js",function(){
|
||||||
|
pluginService('doh');
|
||||||
|
});
|
||||||
|
</script>
|
||||||
Executable
+248
@@ -0,0 +1,248 @@
|
|||||||
|
# coding: utf-8
|
||||||
|
|
||||||
|
|
||||||
|
import time
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import re
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
web_dir = os.getcwd() + "/web"
|
||||||
|
if os.path.exists(web_dir):
|
||||||
|
sys.path.append(web_dir)
|
||||||
|
os.chdir(web_dir)
|
||||||
|
|
||||||
|
import core.mw as mw
|
||||||
|
|
||||||
|
app_debug = False
|
||||||
|
if mw.isAppleSystem():
|
||||||
|
app_debug = True
|
||||||
|
|
||||||
|
|
||||||
|
def getPluginName():
|
||||||
|
return 'doh'
|
||||||
|
|
||||||
|
|
||||||
|
def getPluginDir():
|
||||||
|
return mw.getPluginDir() + '/' + getPluginName()
|
||||||
|
|
||||||
|
|
||||||
|
def getServerDir():
|
||||||
|
return mw.getServerDir() + '/' + getPluginName()
|
||||||
|
|
||||||
|
|
||||||
|
def getInitDFile():
|
||||||
|
if app_debug:
|
||||||
|
return '/tmp/' + getPluginName()
|
||||||
|
return '/etc/init.d/' + getPluginName()
|
||||||
|
|
||||||
|
|
||||||
|
def getArgs():
|
||||||
|
args = sys.argv[2:]
|
||||||
|
tmp = {}
|
||||||
|
args_len = len(args)
|
||||||
|
|
||||||
|
if args_len == 1:
|
||||||
|
t = args[0].strip('{').strip('}')
|
||||||
|
t = t.split(':', 1)
|
||||||
|
tmp[t[0]] = t[1]
|
||||||
|
elif args_len > 1:
|
||||||
|
for i in range(len(args)):
|
||||||
|
t = args[i].split(':', 1)
|
||||||
|
tmp[t[0]] = t[1]
|
||||||
|
|
||||||
|
return tmp
|
||||||
|
|
||||||
|
|
||||||
|
def checkArgs(data, ck=[]):
|
||||||
|
for i in range(len(ck)):
|
||||||
|
if not ck[i] in data:
|
||||||
|
return (False, mw.returnJson(False, '参数:(' + ck[i] + ')没有!'))
|
||||||
|
return (True, mw.returnJson(True, 'ok'))
|
||||||
|
|
||||||
|
|
||||||
|
def getInitdConfTpl():
|
||||||
|
path = getPluginDir() + "/init.d/gitea.tpl"
|
||||||
|
return path
|
||||||
|
|
||||||
|
|
||||||
|
def getInitdConf():
|
||||||
|
path = getServerDir() + "/init.d/doh"
|
||||||
|
return path
|
||||||
|
|
||||||
|
if not os.path.exists(path):
|
||||||
|
return mw.returnJson(False, "请先安装初始化!<br/>默认地址:http://" + mw.getLocalIp() + ":3000")
|
||||||
|
return path
|
||||||
|
|
||||||
|
|
||||||
|
def getConfTpl():
|
||||||
|
path = getPluginDir() + "/config/config.toml"
|
||||||
|
return path
|
||||||
|
|
||||||
|
|
||||||
|
def status():
|
||||||
|
data = mw.execShell(
|
||||||
|
"ps -ef|grep " + getPluginName() + " |grep -v grep | grep -v python | awk '{print $2}'")
|
||||||
|
if data[0] == '':
|
||||||
|
return 'stop'
|
||||||
|
return 'start'
|
||||||
|
|
||||||
|
|
||||||
|
def getHomeDir():
|
||||||
|
if mw.isAppleSystem():
|
||||||
|
user = mw.execShell(
|
||||||
|
"who | sed -n '2, 1p' |awk '{print $1}'")[0].strip()
|
||||||
|
return '/Users/' + user
|
||||||
|
else:
|
||||||
|
return 'www'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def contentReplace(content):
|
||||||
|
|
||||||
|
service_path = mw.getServerDir()
|
||||||
|
content = content.replace('{$ROOT_PATH}', mw.getFatherDir())
|
||||||
|
content = content.replace('{$SERVER_PATH}', service_path)
|
||||||
|
return content
|
||||||
|
|
||||||
|
|
||||||
|
def initDreplace():
|
||||||
|
|
||||||
|
file_tpl = getInitdConfTpl()
|
||||||
|
service_path = mw.getServerDir()
|
||||||
|
|
||||||
|
|
||||||
|
conf_toml = getServerDir() + '/config.toml'
|
||||||
|
if not os.path.exists(conf_toml):
|
||||||
|
conf_tpl = getConfTpl()
|
||||||
|
content = mw.readFile(conf_tpl)
|
||||||
|
mw.writeFile(conf_toml, content)
|
||||||
|
|
||||||
|
# systemd
|
||||||
|
systemDir = mw.systemdCfgDir()
|
||||||
|
systemService = systemDir + '/doh.service'
|
||||||
|
systemServiceTpl = getPluginDir() + '/init.d/doh.service.tpl'
|
||||||
|
if os.path.exists(systemDir) and not os.path.exists(systemService):
|
||||||
|
service_path = mw.getServerDir()
|
||||||
|
se_content = mw.readFile(systemServiceTpl)
|
||||||
|
se_content = se_content.replace('{$SERVER_PATH}', service_path)
|
||||||
|
mw.writeFile(systemService, se_content)
|
||||||
|
mw.execShell('systemctl daemon-reload')
|
||||||
|
|
||||||
|
log_path = getServerDir() + '/log'
|
||||||
|
if not os.path.exists(log_path):
|
||||||
|
os.mkdir(log_path)
|
||||||
|
|
||||||
|
return ''
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def appOp(method):
|
||||||
|
initDreplace()
|
||||||
|
if not mw.isAppleSystem():
|
||||||
|
data = mw.execShell('systemctl ' + method + ' ' + getPluginName())
|
||||||
|
if data[1] == '':
|
||||||
|
return 'ok'
|
||||||
|
return 'fail'
|
||||||
|
return "fail"
|
||||||
|
|
||||||
|
|
||||||
|
def start():
|
||||||
|
return appOp('start')
|
||||||
|
|
||||||
|
|
||||||
|
def stop():
|
||||||
|
return appOp('stop')
|
||||||
|
|
||||||
|
|
||||||
|
def restart():
|
||||||
|
return appOp('restart')
|
||||||
|
|
||||||
|
|
||||||
|
def reload():
|
||||||
|
return appOp('reload')
|
||||||
|
|
||||||
|
|
||||||
|
def initdStatus():
|
||||||
|
if mw.isAppleSystem():
|
||||||
|
return "Apple Computer does not support"
|
||||||
|
|
||||||
|
shell_cmd = 'systemctl status ' + getPluginName() + ' | grep loaded | grep "enabled;"'
|
||||||
|
data = mw.execShell(shell_cmd)
|
||||||
|
if data[0] == '':
|
||||||
|
return 'fail'
|
||||||
|
return 'ok'
|
||||||
|
|
||||||
|
|
||||||
|
def initdInstall():
|
||||||
|
if mw.isAppleSystem():
|
||||||
|
return "Apple Computer does not support"
|
||||||
|
|
||||||
|
mw.execShell('systemctl enable ' + getPluginName())
|
||||||
|
return 'ok'
|
||||||
|
|
||||||
|
|
||||||
|
def initdUinstall():
|
||||||
|
if mw.isAppleSystem():
|
||||||
|
return "Apple Computer does not support"
|
||||||
|
|
||||||
|
mw.execShell('systemctl disable ' + getPluginName())
|
||||||
|
return 'ok'
|
||||||
|
|
||||||
|
|
||||||
|
def runLog():
|
||||||
|
log_path = getServerDir() + '/log/doh.log'
|
||||||
|
return log_path
|
||||||
|
|
||||||
|
def getTotalStatistics():
|
||||||
|
st = status()
|
||||||
|
data = {}
|
||||||
|
if st.strip() == 'start':
|
||||||
|
list_count = pQuery('select count(id) as num from repository')
|
||||||
|
count = list_count[0]["num"]
|
||||||
|
data['status'] = True
|
||||||
|
data['count'] = count
|
||||||
|
data['ver'] = mw.readFile(getServerDir() + '/version.pl').strip()
|
||||||
|
return mw.returnJson(True, 'ok', data)
|
||||||
|
|
||||||
|
data['status'] = False
|
||||||
|
data['count'] = 0
|
||||||
|
return mw.returnJson(False, 'fail', data)
|
||||||
|
|
||||||
|
|
||||||
|
def uninstallPreInspection():
|
||||||
|
return 'ok'
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
func = sys.argv[1]
|
||||||
|
if func == 'status':
|
||||||
|
print(status())
|
||||||
|
elif func == 'start':
|
||||||
|
print(start())
|
||||||
|
elif func == 'stop':
|
||||||
|
print(stop())
|
||||||
|
elif func == 'restart':
|
||||||
|
print(restart())
|
||||||
|
elif func == 'reload':
|
||||||
|
print(reload())
|
||||||
|
elif func == 'initd_status':
|
||||||
|
print(initdStatus())
|
||||||
|
elif func == 'initd_install':
|
||||||
|
print(initdInstall())
|
||||||
|
elif func == 'initd_uninstall':
|
||||||
|
print(initdUinstall())
|
||||||
|
elif func == 'uninstall_pre_inspection':
|
||||||
|
print(uninstallPreInspection())
|
||||||
|
elif func == 'run_log':
|
||||||
|
print(runLog())
|
||||||
|
elif func == 'post_receive_log':
|
||||||
|
print(postReceiveLog())
|
||||||
|
elif func == 'conf':
|
||||||
|
print(getConf())
|
||||||
|
elif func == 'init_conf':
|
||||||
|
print(getInitdConf())
|
||||||
|
elif func == 'get_total_statistics':
|
||||||
|
print(getTotalStatistics())
|
||||||
|
else:
|
||||||
|
print('fail')
|
||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"ps": "DNS over HTTPS(DoH)是一种通过HTTPS协议加密域名解析请求的技术!",
|
||||||
|
"name": "doh",
|
||||||
|
"title": "DoH",
|
||||||
|
"versions": ["0.9.15"],
|
||||||
|
"tip": "soft",
|
||||||
|
"install_pre_inspection":false,
|
||||||
|
"uninstall_pre_inspection":true,
|
||||||
|
"checks": "server/doh",
|
||||||
|
"path":"server/doh",
|
||||||
|
"author": "doh",
|
||||||
|
"date": "2025-11-23",
|
||||||
|
"home": "https://github.com/DNSCrypt/doh-server",
|
||||||
|
"type": "doh",
|
||||||
|
"shell": "install.sh",
|
||||||
|
"pid": "4",
|
||||||
|
"sort": 7
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=DOH(DNS over HTTPS)
|
||||||
|
After=syslog.target
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
RestartSec=2s
|
||||||
|
Type=simple
|
||||||
|
User=www
|
||||||
|
Group=www
|
||||||
|
WorkingDirectory={$SERVER_PATH}/doh
|
||||||
|
# /www/server/doh/doh-proxy -u 127.0.0.1:53 -l 127.0.0.1:3000
|
||||||
|
# /www/server/doh/doh-proxy -h
|
||||||
|
ExecStart={$SERVER_PATH}/doh/doh-proxy -u 127.0.0.1:53 -l 127.0.0.1:3000
|
||||||
|
Restart=always
|
||||||
|
RemainAfterExit=yes
|
||||||
|
#AmbientCapabilities=CAP_NET_BIND_SERVICE
|
||||||
|
#CapabilityBoundingSet=CAP_NET_BIND_SERVICE
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
Executable
+102
@@ -0,0 +1,102 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
|
||||||
|
export PATH
|
||||||
|
|
||||||
|
curPath=`pwd`
|
||||||
|
rootPath=$(dirname "$curPath")
|
||||||
|
rootPath=$(dirname "$rootPath")
|
||||||
|
serverPath=$(dirname "$rootPath")
|
||||||
|
|
||||||
|
if [ -f ${rootPath}/bin/activate ];then
|
||||||
|
source ${rootPath}/bin/activate
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# cd /www/server/mdserver-web/plugins/doh && bash install.sh install 0.9.15
|
||||||
|
|
||||||
|
# /www/server/doh/doh-proxy --config /www/server/doh/config.toml
|
||||||
|
# /www/server/doh/doh-proxy --config /www/server/doh/config.toml --check
|
||||||
|
|
||||||
|
|
||||||
|
# /www/server/doh/doh-proxy -u 127.0.0.1:53 -l 127.0.0.1:3000
|
||||||
|
|
||||||
|
# 详细状态信息
|
||||||
|
# sudo systemctl status doh -l
|
||||||
|
# 查看完整日志
|
||||||
|
# sudo journalctl -u doh -n 100
|
||||||
|
# 实时日志跟踪
|
||||||
|
# sudo journalctl -u doh -f
|
||||||
|
|
||||||
|
|
||||||
|
URL_DOWNLOAD=https://github.com/DNSCrypt/doh-server/releases/download
|
||||||
|
|
||||||
|
|
||||||
|
bash ${rootPath}/scripts/getos.sh
|
||||||
|
OSNAME=`cat ${rootPath}/data/osname.pl`
|
||||||
|
OSNAME_ID=`cat /etc/*-release | grep VERSION_ID | awk -F = '{print $2}' | awk -F "\"" '{print $2}'`
|
||||||
|
|
||||||
|
Install_App()
|
||||||
|
{
|
||||||
|
|
||||||
|
mkdir -p $serverPath/source/doh
|
||||||
|
|
||||||
|
echo '正在安装脚本文件...'
|
||||||
|
version=$1
|
||||||
|
|
||||||
|
if [ "macos" == "$OSNAME" ];then
|
||||||
|
echo "not support!"
|
||||||
|
exit
|
||||||
|
else
|
||||||
|
file=doh-proxy_${version}_linux-x86_64
|
||||||
|
fi
|
||||||
|
|
||||||
|
# https://github.com/DNSCrypt/doh-server/releases/download/0.9.15/doh-proxy_0.9.15_linux-aarch64.tar.bz2
|
||||||
|
file_xz="${file}.tar.bz2"
|
||||||
|
echo "wget -O $serverPath/source/doh/$file_xz ${URL_DOWNLOAD}/${version}/${file_xz}"
|
||||||
|
if [ ! -f $serverPath/source/doh/$file_xz ];then
|
||||||
|
wget --no-check-certificate -O $serverPath/source/doh/$file_xz ${URL_DOWNLOAD}/${version}/${file_xz}
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f $serverPath/source/doh/$file_xz ];then
|
||||||
|
cd $serverPath/source/doh && tar -xjf $file_xz
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
echo "mv $serverPath/source/doh/doh-proxy $serverPath/doh"
|
||||||
|
if [ -f $serverPath/source/doh/doh-proxy ];then
|
||||||
|
mv $serverPath/source/doh/doh-proxy $serverPath/doh
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if [ -d $serverPath/doh ];then
|
||||||
|
echo $version > $serverPath/doh/version.pl
|
||||||
|
|
||||||
|
cd ${rootPath} && python3 plugins/doh/index.py start
|
||||||
|
cd ${rootPath} && python3 plugins/doh/index.py initd_install
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo 'install doh success'
|
||||||
|
}
|
||||||
|
|
||||||
|
Uninstall_App()
|
||||||
|
{
|
||||||
|
|
||||||
|
if [ -f /usr/lib/systemd/system/doh.service ];then
|
||||||
|
systemctl stop doh
|
||||||
|
systemctl disable doh
|
||||||
|
rm -rf /usr/lib/systemd/system/doh.service
|
||||||
|
systemctl daemon-reload
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -rf $serverPath/doh
|
||||||
|
echo 'uninstall doh success'
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
action=$1
|
||||||
|
version=$2
|
||||||
|
if [ "${1}" == 'install' ];then
|
||||||
|
Install_App $version
|
||||||
|
else
|
||||||
|
Uninstall_App $version
|
||||||
|
fi
|
||||||
Executable
+37
@@ -0,0 +1,37 @@
|
|||||||
|
|
||||||
|
function dohPost(method,args,callback, title){
|
||||||
|
|
||||||
|
var _args = null;
|
||||||
|
if (typeof(args) == 'string'){
|
||||||
|
_args = JSON.stringify(toArrayObject(args));
|
||||||
|
} else {
|
||||||
|
_args = JSON.stringify(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
var _title = '正在获取...';
|
||||||
|
if (typeof(title) != 'undefined'){
|
||||||
|
_title = title;
|
||||||
|
}
|
||||||
|
|
||||||
|
var loadT = layer.msg(_title, { icon: 16, time: 0, shade: 0.3 });
|
||||||
|
$.post('/plugins/run', {name:'doh', func:method, args:_args}, function(data) {
|
||||||
|
layer.close(loadT);
|
||||||
|
if (!data.status){
|
||||||
|
layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(typeof(callback) == 'function'){
|
||||||
|
callback(data);
|
||||||
|
}
|
||||||
|
},'json');
|
||||||
|
}
|
||||||
|
|
||||||
|
function dohRead(){
|
||||||
|
|
||||||
|
var readme = '<ul class="help-info-text c7">';
|
||||||
|
readme += '<li>DNS服务</li>';
|
||||||
|
readme += '</ul>';
|
||||||
|
|
||||||
|
$('.soft-man-con').html(readme);
|
||||||
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
🌐 Custom DoH Proxy
|
||||||
|
Use /dns-query endpoint
|
||||||
@@ -22,7 +22,7 @@ Install_App()
|
|||||||
|
|
||||||
APP_DIR=${serverPath}/source/haproxy
|
APP_DIR=${serverPath}/source/haproxy
|
||||||
mkdir -p $APP_DIR
|
mkdir -p $APP_DIR
|
||||||
|
echo $MIN_VERSION > $serverPath/haproxy/version.pl
|
||||||
|
|
||||||
LOCAL_ADDR=common
|
LOCAL_ADDR=common
|
||||||
cn=$(curl -fsSL -m 10 -s http://ipinfo.io/json | grep "\"country\": \"CN\"")
|
cn=$(curl -fsSL -m 10 -s http://ipinfo.io/json | grep "\"country\": \"CN\"")
|
||||||
@@ -59,7 +59,6 @@ Install_App()
|
|||||||
cd ${APP_DIR}/haproxy-${VERSION} && make TARGET=linux-glibc && make install PREFIX=$serverPath/haproxy
|
cd ${APP_DIR}/haproxy-${VERSION} && make TARGET=linux-glibc && make install PREFIX=$serverPath/haproxy
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo $MIN_VERSION > $serverPath/haproxy/version.pl
|
|
||||||
echo '安装Haproxy成功'
|
echo '安装Haproxy成功'
|
||||||
|
|
||||||
#Haproxy日志配置
|
#Haproxy日志配置
|
||||||
|
|||||||
@@ -206,6 +206,11 @@ def confReplace():
|
|||||||
if not os.path.exists(a_conf):
|
if not os.path.exists(a_conf):
|
||||||
mw.writeFile(a_conf, mw.readFile(a_conf_tpl))
|
mw.writeFile(a_conf, mw.readFile(a_conf_tpl))
|
||||||
|
|
||||||
|
# copy resty lib
|
||||||
|
src_resty_dir = getPluginDir()+'/resty/*'
|
||||||
|
dst_resty_dir = getServerDir()+'/lualib/resty'
|
||||||
|
mw.execShell('cp -rf ' + src_resty_dir + ' ' + dst_resty_dir)
|
||||||
|
|
||||||
|
|
||||||
def initDreplace():
|
def initDreplace():
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ serverPath=$(dirname "$rootPath")
|
|||||||
sysName=`uname`
|
sysName=`uname`
|
||||||
|
|
||||||
# cd /www/server/mdserver-web/plugins/php && bash install.sh install 73
|
# cd /www/server/mdserver-web/plugins/php && bash install.sh install 73
|
||||||
|
# cd /www/server/mdserver-web/plugins/php && bash install.sh install 85
|
||||||
# https://www.php.net/releases
|
# https://www.php.net/releases
|
||||||
|
|
||||||
if id www &> /dev/null ;then
|
if id www &> /dev/null ;then
|
||||||
|
|||||||
@@ -119,8 +119,8 @@ if [ "$sysName" == "Darwin" ];then
|
|||||||
export OPENSSL_CFLAGS="-I${LIB_DEPEND_DIR}/include"
|
export OPENSSL_CFLAGS="-I${LIB_DEPEND_DIR}/include"
|
||||||
export OPENSSL_LIBS="-L/${LIB_DEPEND_DIR}/lib -lssl -lcrypto -lz"
|
export OPENSSL_LIBS="-L/${LIB_DEPEND_DIR}/lib -lssl -lcrypto -lz"
|
||||||
else
|
else
|
||||||
cd ${rootPath}/plugins/php/lib && /bin/bash openssl_30.sh
|
cd ${rootPath}/plugins/php/lib && /bin/bash openssl_35.sh
|
||||||
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$serverPath/lib/openssl30/lib/pkgconfig
|
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$serverPath/lib/openssl35/lib/pkgconfig
|
||||||
OPTIONS="$OPTIONS --with-openssl"
|
OPTIONS="$OPTIONS --with-openssl"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -120,8 +120,9 @@ if [ "$sysName" == "Darwin" ];then
|
|||||||
export OPENSSL_CFLAGS="-I${LIB_DEPEND_DIR}/include"
|
export OPENSSL_CFLAGS="-I${LIB_DEPEND_DIR}/include"
|
||||||
export OPENSSL_LIBS="-L/${LIB_DEPEND_DIR}/lib -lssl -lcrypto -lz"
|
export OPENSSL_LIBS="-L/${LIB_DEPEND_DIR}/lib -lssl -lcrypto -lz"
|
||||||
else
|
else
|
||||||
cd ${rootPath}/plugins/php/lib && /bin/bash openssl_30.sh
|
echo "lib"
|
||||||
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$serverPath/lib/openssl30/lib/pkgconfig
|
cd ${rootPath}/plugins/php/lib && /bin/bash openssl_35.sh
|
||||||
|
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$serverPath/lib/openssl35/lib/pkgconfig
|
||||||
OPTIONS="$OPTIONS --with-openssl"
|
OPTIONS="$OPTIONS --with-openssl"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,11 @@ if [ "$version" -lt "70" ];then
|
|||||||
LIBV=2.2.0
|
LIBV=2.2.0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if [ "$version" == "85" ];then
|
||||||
|
LIBV=3.4.0
|
||||||
|
fi
|
||||||
|
|
||||||
LIB_PATH_NAME=lib/php
|
LIB_PATH_NAME=lib/php
|
||||||
if [ -d $serverPath/php/${version}/lib64 ];then
|
if [ -d $serverPath/php/${version}/lib64 ];then
|
||||||
LIB_PATH_NAME=lib64
|
LIB_PATH_NAME=lib64
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ serverPath=$(dirname "$rootPath")
|
|||||||
sourcePath=${serverPath}/source/php
|
sourcePath=${serverPath}/source/php
|
||||||
SYS_ARCH=`arch`
|
SYS_ARCH=`arch`
|
||||||
LIBNAME=redis
|
LIBNAME=redis
|
||||||
LIBV=6.1.0
|
LIBV=6.3.0
|
||||||
sysName=`uname`
|
sysName=`uname`
|
||||||
actionType=$1
|
actionType=$1
|
||||||
version=$2
|
version=$2
|
||||||
@@ -24,7 +24,7 @@ elif [ "$version" -lt "70" ];then
|
|||||||
elif [ "$version" -lt "80" ];then
|
elif [ "$version" -lt "80" ];then
|
||||||
LIBV=5.3.7
|
LIBV=5.3.7
|
||||||
elif [ "$version" -gt "80" ];then
|
elif [ "$version" -gt "80" ];then
|
||||||
LIBV=6.1.0
|
LIBV=6.3.0
|
||||||
else
|
else
|
||||||
echo 'ok'
|
echo 'ok'
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -45,10 +45,6 @@ def send_msg(bot, tag='ad', trigger_time=300):
|
|||||||
mw.writeFile(lock_file, json.dumps(lock_data))
|
mw.writeFile(lock_file, json.dumps(lock_data))
|
||||||
# 信号只在一个周期内执行一次|end
|
# 信号只在一个周期内执行一次|end
|
||||||
keyboard = [
|
keyboard = [
|
||||||
[
|
|
||||||
types.InlineKeyboardButton(
|
|
||||||
text="官方收劫持|SEO", url='https://t.me/xiaosi876')
|
|
||||||
],
|
|
||||||
[
|
[
|
||||||
types.InlineKeyboardButton(
|
types.InlineKeyboardButton(
|
||||||
text="高价收一切流量 @caifutong555", url='https://t.me/caifutong555')
|
text="高价收一切流量 @caifutong555", url='https://t.me/caifutong555')
|
||||||
|
|||||||
@@ -54,16 +54,11 @@ def send_msg(bot, tag='ad', trigger_time=300):
|
|||||||
mw.writeFile(lock_file, json.dumps(lock_data))
|
mw.writeFile(lock_file, json.dumps(lock_data))
|
||||||
# 信号只在一个周期内执行一次|end
|
# 信号只在一个周期内执行一次|end
|
||||||
|
|
||||||
# 官方收劫持|SEO| 6m | next,2/6 | @tlx104
|
|
||||||
# https://t.me/gjgzs2022 | 22/m | @GJ_gzs
|
# https://t.me/gjgzs2022 | 22/m | @GJ_gzs
|
||||||
# 实名认证/过人脸🕵️♀️各种账号处理✅ | 30/m| next,12/30 | @nngzs
|
# 实名认证/过人脸🕵️♀️各种账号处理✅ | 30/m| next,12/30 | @nngzs
|
||||||
# 18+资源采集| 4/m | next,1/14 | @liuxingyu123
|
# 18+资源采集| 4/m | next,1/14 | @liuxingyu123
|
||||||
|
|
||||||
keyboard = [
|
keyboard = [
|
||||||
[
|
|
||||||
types.InlineKeyboardButton(
|
|
||||||
text="官方收劫持|SEO", url='https://t.me/xiaosi876')
|
|
||||||
],
|
|
||||||
[
|
[
|
||||||
types.InlineKeyboardButton(
|
types.InlineKeyboardButton(
|
||||||
text="高价收一切流量 @caifutong555", url='https://t.me/caifutong555')
|
text="高价收一切流量 @caifutong555", url='https://t.me/caifutong555')
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
location /dns-query {
|
||||||
|
proxy_pass http://127.0.0.1:3000;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
# 在http目录下配置
|
||||||
|
# lua_shared_dict obf_cache 64m;
|
||||||
|
|
||||||
|
# 混淆配置
|
||||||
|
body_filter_by_lua_block {
|
||||||
|
local obf = require("resty.obf.obf")
|
||||||
|
obf.process_response()
|
||||||
|
}
|
||||||
|
|
||||||
|
location / {
|
||||||
|
|
||||||
|
#set $close_close 'true'; # 关闭 关闭开关
|
||||||
|
#set $debug_close 'true'; # 关闭 开始调试
|
||||||
|
set $obf_js_mode 'inline'; # 解密模式 link:链接, inline:内链模式
|
||||||
|
set $obf_js_url 'https://cdn.jsdelivr.net/npm/node-forge@1.3.1/dist/forge.min.js?v=1'; # 自定义解密js地址,tips: forge
|
||||||
|
set $obf_timeout 600; # 缓存时间
|
||||||
|
set $obf_rand_var 'true'; # 随机变量
|
||||||
|
set $obf_rand_extra 'true'; # 随机混淆内容
|
||||||
|
set $obf_uint8_b64 'false'; # 是Uint8Array,否base64
|
||||||
|
#set $obf_prof 'true'; # 测试时间消耗记录
|
||||||
|
set $obf_cache_item_max 0; # 缓存多少
|
||||||
|
set $obf_cache_max_bytes 16777216; # 缓存字节大小
|
||||||
|
|
||||||
|
if (!-e $request_filename) {
|
||||||
|
rewrite ^(.*)$ /index.php/$1 last;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
# 在http目录下配置
|
||||||
|
# lua_shared_dict obf_cache 64m;
|
||||||
|
|
||||||
|
# 混淆配置-代理
|
||||||
|
body_filter_by_lua_block {
|
||||||
|
local obf = require("resty.obf.obf")
|
||||||
|
obf.process_response()
|
||||||
|
}
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://127.0.0.1:8989;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
proxy_hide_header Content-Encoding;
|
||||||
|
#gzip off;
|
||||||
|
proxy_set_header Accept-Encoding "";
|
||||||
|
proxy_set_header If-Modified-Since "";
|
||||||
|
proxy_set_header If-None-Match "";
|
||||||
|
|
||||||
|
#set $close_close 'true';
|
||||||
|
#set $debug_close 'true';
|
||||||
|
set $obf_js_mode 'inline';
|
||||||
|
set $obf_js_url '';
|
||||||
|
set $obf_timeout 600;
|
||||||
|
set $obf_rand_var 'true';
|
||||||
|
set $obf_rand_extra 'true';
|
||||||
|
set $obf_uint8_b64 'true';
|
||||||
|
set $obf_prof 'true';
|
||||||
|
set $obf_cache_item_max 0;
|
||||||
|
set $obf_cache_max_bytes 16777216;
|
||||||
|
set $obf_kdf_raw 'false';
|
||||||
|
|
||||||
|
header_filter_by_lua_block {
|
||||||
|
ngx.header.content_length = nil
|
||||||
|
}
|
||||||
|
}
|
||||||
+15
-1
@@ -2931,7 +2931,21 @@ function rewrite(siteName){
|
|||||||
$("#webedit-con").html(webBakHtml);
|
$("#webedit-con").html(webBakHtml);
|
||||||
|
|
||||||
var editor = CodeMirror.fromTextArea(document.getElementById("rewriteBody"), {
|
var editor = CodeMirror.fromTextArea(document.getElementById("rewriteBody"), {
|
||||||
extraKeys: {"Ctrl-Space": "autocomplete"},
|
extraKeys: {
|
||||||
|
"Ctrl-Space": "autocomplete",
|
||||||
|
"Ctrl-F": "findPersistent",
|
||||||
|
"Ctrl-H": "replaceAll",
|
||||||
|
"Ctrl-S": function() {
|
||||||
|
$("#rewriteBody").empty();
|
||||||
|
$("#rewriteBody").text(editor.getValue());
|
||||||
|
setRewrite(filename, encodeURIComponent(editor.getValue()));
|
||||||
|
},
|
||||||
|
"Cmd-S":function() {
|
||||||
|
$("#rewriteBody").empty();
|
||||||
|
$("#rewriteBody").text(editor.getValue());
|
||||||
|
setRewrite(filename, encodeURIComponent(editor.getValue()));
|
||||||
|
},
|
||||||
|
},
|
||||||
lineNumbers: true,
|
lineNumbers: true,
|
||||||
matchBrackets:true,
|
matchBrackets:true,
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user