diff --git a/pom.xml b/pom.xml index 968700490d2297c1d559aeec3437e258fc091f01..f7025c3a7ec001a4c202a72b178deaff20e1e81b 100644 --- a/pom.xml +++ b/pom.xml @@ -134,7 +134,6 @@ expiringmap ${expiringmap.version} - diff --git a/src/main/java/com/cym/service/ServerService.java b/src/main/java/com/cym/service/ServerService.java index 3a9cfed3bc42dee28de757c44ca20f8dab765635..3827ef4fc9c2ee67555104ecb70419300da7451b 100644 --- a/src/main/java/com/cym/service/ServerService.java +++ b/src/main/java/com/cym/service/ServerService.java @@ -1,11 +1,12 @@ package com.cym.service; import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.UUID; +import java.util.*; +import cn.hutool.json.JSONArray; +//import com.alibaba.fastjson.JSONObject; +import cn.hutool.json.JSONObject; +import com.beust.jcommander.internal.Lists; import org.noear.solon.annotation.Component; import org.noear.solon.annotation.Inject; import org.slf4j.Logger; @@ -235,10 +236,13 @@ public class ServerService { // 设置location List locations = new ArrayList<>(); List locationBlocks = serverNgx.findAll(NgxBlock.class, "location"); + NgxBlock locationBlockTemp; for (NgxEntry item : locationBlocks) { Location location = new Location(); // 目前只支持http段的 proxy_pass - NgxParam proxyPassParam = ((NgxBlock) item).findParam("proxy_pass"); + locationBlockTemp = (NgxBlock) item; + + NgxParam proxyPassParam = locationBlockTemp.findParam("proxy_pass"); location.setPath(((NgxBlock) item).getValue()); // 如果没有proxy_pass type 0,说明可能是静态文件夹映射 type 1 @@ -264,7 +268,8 @@ public class ServerService { location.setType(1); } - location.setLocationParamJson(null); + location.setLocationParamJson(getParamJsonFromLocationBlock(locationBlockTemp)); + location.setHeader(0); locations.add(location); } @@ -272,11 +277,49 @@ public class ServerService { server.setSeq(SnowFlakeUtils.getId()); addOver(server, "", locations); } + // 删除临时文件 FileUtil.del(initNginxPath); } - + + private String getParamJsonFromLocationBlock(NgxBlock locationBlock){ + + List proxyConfigList = Lists.newArrayList("proxy_http_version", "proxy_redirect", + "proxy_set_header", "proxy_cache", "proxy_cache_valid", "proxy_cache_key", "proxy_connect_timeout", + "proxy_read_timeout", "proxy_send_timeout", "proxy_buffer_size", "proxy_buffers", + "proxy_busy_buffers_size", "proxy_cookie_path","proxy_intercept_errors","proxy_request_buffering", + "proxy_buffering", + "proxy_ignore_client_abort","expires","add_header","client_max_body_size" + ); + + Collection entries = locationBlock.getEntries(); + List paramsTemp; + JSONObject paramJsonTemp = null; + JSONArray paramJsonArray = new JSONArray(); + NgxParam ngxParamTemp; + for (String proxyConfig : proxyConfigList) { + paramsTemp = locationBlock.findAll(NgxParam.class,proxyConfig); + if (paramsTemp != null && !paramsTemp.isEmpty()){ + + for (NgxEntry paramEntry : paramsTemp) { + ngxParamTemp = (NgxParam) paramEntry; + ngxParamTemp.getName(); + paramJsonTemp = new JSONObject(); + paramJsonTemp.put("name",ngxParamTemp.getName()); + paramJsonTemp.put("value",ngxParamTemp.getValue()); + paramJsonArray.add(paramJsonTemp); + } + } + + } + if (!paramJsonArray.isEmpty()){ + return paramJsonArray.toString(); + }else { + return null; + } + + } /** * 重新创建配置文件,删除影响解析的行(比如#号开头,但是此行没有其他内容) *