优化代码。

Signed-off-by: HITSword <admin@huayizhiyun.com>
master
HITSword 2020-01-09 17:21:19 +08:00
parent d130bedea6
commit 0331af549d
5 changed files with 357 additions and 268 deletions

1
.gitignore vendored 100644
View File

@ -0,0 +1 @@
.idea

View File

@ -247,7 +247,7 @@ function amh_module_admin()
elif [ "$action" == 'del' ]; then
php ${module_dir}hyproxy-cli.php --action='del' --server_name=${domain}
rm -f "$domain_conf" && echo "[OK] successfully delete $domain HYProxy.";
echo "[OK] successfully delete $domain HYProxy.";
amh nginx reload;
elif [ "$action" == 'start' ]; then
php ${module_dir}hyproxy-cli.php --action='edit' --server_name=${domain} --field_name='status' --value='start';

View File

@ -0,0 +1,18 @@
#禁用反向代理缓存模板
server {
listen 80;
listen [::]:80;
server_name {$server_name};
index {$index};
location / {
default_type text/html;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host {$header_host};
proxy_pass {$proxy_pass};
}
access_log {$logs_path}.access.log combined; #access_log end
error_log {$logs_path}.error.log crit; #error_log end
}

View File

@ -0,0 +1,26 @@
#启用反向代理缓存模板
server {
listen 80;
listen [::]:80;
server_name {$server_name};
index {$index};
location / {
default_type text/html;
proxy_cache hyproxy;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host {$header_host};
proxy_pass {$proxy_pass};
if ($http_Cache_Control = "no-cache") {
rewrite ^(.*)$ /purge$1 last;
}
}
location ~ /purge(/.*){
proxy_cache_purge hyproxy $scheme://$host$1$is_args$args;
}
access_log {$logs_path}.access.log combined; #access_log end
error_log {$logs_path}.error.log crit; #error_log end
}

View File

@ -1,5 +1,5 @@
<?php
/*
/**
* HYPorxy CLI 文件
* 依赖PDO 、InnoDB
* 需要安装PDO_MYSQL-1.0.2插件
@ -10,13 +10,15 @@ if (PHP_SAPI !== "cli") {
header("status: 404 Not Found");
die();
}
define ('AMH_ROOT', '/home/wwwroot/index/web' . DIRECTORY_SEPARATOR); // AHM根目录
define ('AMH_Amysql', AMH_ROOT . 'Amysql' . DIRECTORY_SEPARATOR); // 系统目录
define ('_HYProxy', dirname(__FILE__) . DIRECTORY_SEPARATOR); // HYProxy插件根目录
define ('_HYCONF', '/usr/local/nginx/conf/hyproxy' . DIRECTORY_SEPARATOR); // HY Nginx conf目录
define('DS', DIRECTORY_SEPARATOR); // 目录分隔符
define('AMH_ROOT', '/home/wwwroot/index/web' . DS); // AHM根目录
define('AMH_AMYSQL', AMH_ROOT . 'Amysql' . DS); // 系统目录
define('_HYPROXY', dirname(__FILE__) . DS); // HYProxy插件根目录
define('_HYCONF', '/usr/local/nginx/conf/hyproxy' . DS); // HYProxy Nginx conf目录
define('_HYLOGS', '/usr/local/nginx/logs' . DS); // HYProxy Nginx logs目录
require_once(AMH_Amysql . 'Config.php'); //加载配置参数
require_once(_HYProxy . 'Class/medoo.php'); //加载medoo数据库类库
require_once(AMH_AMYSQL . 'Config.php'); //加载配置参数
require_once(_HYPROXY . 'Class/medoo.php'); //加载medoo数据库类库
$HYConfig = array(
'database_type' => 'mysql',
@ -58,22 +60,34 @@ switch ($param['action']) {
echo 'error action';
}
function hyproxy_list($proxy_status){//done 列出站点列表ID,域名,状态
/**
* 列出站点列表ID,域名,状态
* @param $proxy_status
* @return string
*/
function hyproxy_list($proxy_status)
{
global $medoo;
empty($proxy_status) && $proxy_status = 'start';
$table = 'module_hyproxy';
$columns = array('hyproxy_id','server_name','status');
$where = array('status'=>$proxy_status);
$data = $medoo->select($table,$columns,$where);
$list = $medoo->select($table, $columns, $where);
$res = '';
foreach ($data as &$value) {
$res.=sprintf("%d,%s,%s\n",$value['hyproxy_id'],$value['server_name'],$value['status']);
foreach ($list as $row) {
$res.=sprintf("%d,%s,%s\n", $row['hyproxy_id'], $row['server_name'], $row['status']);
}
return $res;
}
function hyproxy_make($server_name){//done
/**
* 生成nginx配置文件
* @param $server_name
* @return string
*/
function hyproxy_make($server_name)
{
global $medoo;
$table = 'module_hyproxy';
$columns = '*';
@ -81,75 +95,41 @@ function hyproxy_make($server_name){//done
if (!empty($server_name)) {//指定域名
$where = array('server_name'=>trim($server_name));
}
$data = $medoo->select($table,$columns,$where);
$list = $medoo->select($table, $columns, $where);
$res = '';
if (empty($data)) {
if (empty($list)) {
$res = "[ERROR] The server_name does not exist.\n";
} else {
if (empty($server_name)) {
hy_deldir(_HYCONF);//删除所有
}
foreach ($data as &$value) {
if (!empty($value['proxy_cache'])) {
$nginx = sprintf('server {
listen 80;
listen [::]:80;
server_name %s;
index %s;
location / {
default_type text/html;
proxy_cache hyproxy;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host %s;
proxy_pass %s;
if ($http_Cache_Control = "no-cache") {
rewrite ^(.*)$ /purge$1 last;
}
}
location ~ /purge(/.*){
proxy_cache_purge hyproxy $scheme://$host$1$is_args$args;
}
access_log /usr/local/nginx/logs/%s.access.log combined; #access_log end
error_log /usr/local/nginx/logs/%s.error.log crit; #error_log end
}',$value['server_name'],$value['index'],$value['header_host'],$value['proxy_pass'],$value['server_name'],$value['server_name']);
} else {
$nginx = sprintf('server {
listen 80;
listen [::]:80;
server_name %s;
index %s;
location / {
default_type text/html;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host %s;
proxy_pass %s;
}
access_log /usr/local/nginx/logs/%s.access.log combined; #access_log end
error_log /usr/local/nginx/logs/%s.error.log crit; #error_log end
}',$value['server_name'],$value['index'],$value['header_host'],$value['proxy_pass'],$value['server_name'],$value['server_name']);
}
if ($value['status']=='start') {
$filebytes = file_put_contents(_HYCONF.$value['server_name'].'.conf', $nginx); //写入内容
} else {
$filebytes = unlink(_HYCONF.$value['server_name'].'.conf');//删除
foreach ($list as $row) {
$filebytes = false;
$conf = hy_build_nginx_conf($row);
if (!$row['status']=='start') {
$filebytes = unlink(_HYCONF.$row['server_name'].'.conf');//删除
} elseif (!empty($conf)) {
$filebytes = file_put_contents(_HYCONF.$row['server_name'].'.conf', $conf); //写入内容
}
if ($filebytes) {
$res.=sprintf("[OK] %s conf make is done.\n",$value['server_name']);
$res.=sprintf("[OK] %s conf make is done.\n", $row['server_name']);
} else {
$res.=sprintf("[ERROR] %s conf make is error.\n",$value['server_name']);
$res.=sprintf("[ERROR] %s conf make is error.\n", $row['server_name']);
}
}
}
return $res;
}
function hyproxy_add($server_name,$proxy_pass=''){//done
/**
* 新建反向代理
* @param $server_name
* @param string $proxy_pass
* @return string
*/
function hyproxy_add($server_name, $proxy_pass = '')
{
if (empty($server_name)) {
return "[ERROR] The server_name is empty.\n";//不能为空
}
@ -188,7 +168,15 @@ function hyproxy_add($server_name,$proxy_pass=''){//done
return $res;
}
function hyproxy_edit($server_name,$field_name='',$value=''){//done
/**
* 修改反向代理参数
* @param $server_name
* @param string $field_name
* @param string $value
* @return string
*/
function hyproxy_edit($server_name, $field_name = '', $value = '')
{
if (empty($server_name)) {
return "[ERROR] The server_name is empty.\n";//不能为空
}
@ -230,7 +218,13 @@ function hyproxy_edit($server_name,$field_name='',$value=''){//done
return $res;
}
function hyproxy_del($server_name){
/**
* 删除反向代理
* @param $server_name
* @return string
*/
function hyproxy_del($server_name)
{
if (empty($server_name)) {
return "[ERROR] The server_name is empty.\n";//不能为空
}
@ -251,10 +245,18 @@ function hyproxy_del($server_name){
$res = "[ERROR] Proxy del error.\n";
}
}
unlink(_HYCONF . $server_name . '.conf');//删除配置文件
unlink(_HYLOGS . $server_name . '.access.log');//删除日志文件
unlink(_HYLOGS . $server_name . '.error.log');//删除日志文件
return $res;
}
function hy_deldir($path) {
/**
* 删除目录和子目录
* @param $path
*/
function hy_deldir($path)
{
//如果是目录则继续
if (is_dir($path)) {
//扫描一个文件夹内的所有文件夹和文件并返回数组
@ -276,3 +278,45 @@ function hy_deldir($path) {
}
}
}
/**
* 根据传入数据构建nginx配置内容
* @param $row
*/
function hy_build_nginx_conf($row)
{
//开启反向代理缓存模板
$proxy_cache_template_path = _HYPROXY . 'conf' . DS . 'proxy_cache_template.conf';
$proxy_cache_template = '';
if (file_exists($proxy_cache_template_path)) {
$proxy_cache_template = file_get_contents($proxy_cache_template_path);
}
//禁用反向代理缓存模板
$no_cache_template_path = _HYPROXY . 'conf' . DS . 'no_cache_template.conf';
$no_cache_template = '';
if (file_exists($no_cache_template_path)) {
$no_cache_template = file_get_contents($no_cache_template_path);
}
$conf = false;
if (!empty($row)) {
$row['logs_path'] = _HYLOGS . $row['server_name'];
//判断使用哪个模板
$template = false;
if (!empty($row['proxy_cache']) && !empty($proxy_cache_template)) {
$template = $proxy_cache_template;
} elseif (!empty($no_cache_template)) {
$template = $no_cache_template;
}
//模板有效的话,进行遍历数组替换模板变量
if ($template) {
foreach ($row as $k => $v) {
$template=str_replace('{$'.$k.'}', $v, $template);
}
$conf = $template;
}
}
return $conf;
}