@@ -414,6 +414,69 @@ public NgxBlock buildBlockUpstream(Upstream upstream) {
414414 return ngxBlockServer ;
415415 }
416416
417+ public static List <Integer > processPort (String listenString ){
418+ List <Integer > numbers = new ArrayList <>();
419+
420+ // 使用逗号分割字符串
421+ String [] partsByComma = listenString .split ("," );
422+
423+ for (String part : partsByComma ) {
424+ String [] range = part .split ("-" );
425+ if (range .length == 2 ) {
426+ // 处理为范围的情况
427+ int start = Integer .parseInt (range [0 ]);
428+ int end = Integer .parseInt (range [1 ]);
429+
430+ if (start <= end ) {
431+ for (int i = start ; i <= end ; i ++) {
432+ numbers .add (i );
433+ }
434+ } else {
435+ for (int i = start ; i >= end ; i --) {
436+ numbers .add (i );
437+ }
438+ }
439+ } else {
440+ // 处理单个数字的情况
441+ int num = Integer .parseInt (part );
442+ numbers .add (num );
443+ }
444+ }
445+ return numbers ;
446+ }
447+
448+ public static Boolean processListenPort (Server server , NgxBlock ngxBlockServer , Boolean isIpv6 ) {
449+ if (isIpv6 && server .getIpv6 () != 1 ){
450+ return false ;
451+ }
452+ List <Integer > ports = processPort (server .getListen ());
453+
454+ String listenKey = isIpv6 ? "listen [::]:" : "listen " ;
455+
456+ String value = "" ;
457+ for (Integer port : ports ) {
458+ NgxParam ngxParam = new NgxParam ();
459+ value = listenKey + port ;
460+ if (server .getDef () == 1 ) {
461+ value += " default_server" ;
462+ }
463+ if (server .getProxyProtocol () == 1 ) {
464+ value += " proxy_protocol" ;
465+ }
466+
467+ if (server .getSsl () == 1 ) {
468+ value += " ssl" ;
469+ if (server .getHttp2 () == 1 ) { // http2旧版写法
470+ value += " http2" ;
471+ }
472+ }
473+ ngxParam .addValue (value );
474+ ngxBlockServer .addEntry (ngxParam );
475+ }
476+ return true ;
477+
478+ }
479+
417480 public NgxBlock bulidBlockServer (Server server , ConfExt confExt ) {
418481 NgxParam ngxParam = null ;
419482
@@ -438,44 +501,10 @@ public NgxBlock bulidBlockServer(Server server, ConfExt confExt) {
438501 }
439502
440503 // 监听端口
441- ngxParam = new NgxParam ();
442- String value = "listen " + server .getListen ();
443- if (server .getDef () == 1 ) {
444- value += " default" ;
445- }
446- if (server .getProxyProtocol () == 1 ) {
447- value += " proxy_protocol" ;
448- }
449-
450- if (server .getSsl () == 1 ) {
451- value += " ssl" ;
452- if (server .getHttp2 () == 1 ) { // http2旧版写法
453- value += " http2" ;
454- }
455- }
456- ngxParam .addValue (value );
457- ngxBlockServer .addEntry (ngxParam );
458-
504+ processListenPort (server , ngxBlockServer , false );
459505 // 监控ipv6
460- if (server .getIpv6 () == 1 ) {
461- ngxParam = new NgxParam ();
462- value = "listen [::]:" + replaceIp (server .getListen ());
463- if (server .getDef () == 1 ) {
464- value += " default" ;
465- }
466- if (server .getProxyProtocol () == 1 ) {
467- value += " proxy_protocol" ;
468- }
506+ processListenPort (server , ngxBlockServer , true );
469507
470- if (server .getSsl () == 1 ) {
471- value += " ssl" ;
472- if (server .getHttp2 () == 1 ) { // http2旧版写法
473- value += " http2" ;
474- }
475- }
476- ngxParam .addValue (value );
477- ngxBlockServer .addEntry (ngxParam );
478- }
479508
480509 if (server .getSsl () == 1 && server .getHttp2 () == 2 ) { // http2新版写法
481510 ngxParam = new NgxParam ();
@@ -718,7 +747,7 @@ public NgxBlock bulidBlockServer(Server server, ConfExt confExt) {
718747
719748 /**
720749 * 配置ssl
721- *
750+ *
722751 * @param server
723752 * @param ngxBlockServer
724753 */
@@ -776,7 +805,7 @@ private void setServerSsl(Server server, NgxBlock ngxBlockServer) {
776805
777806 /**
778807 * 替换掉listen中的ip
779- *
808+ *
780809 * @param listen
781810 * @return
782811 */
@@ -791,7 +820,7 @@ private String replaceIp(String listen) {
791820
792821 /**
793822 * include防止重复
794- *
823+ *
795824 * @param ngxBlockHttp
796825 * @param ngxParam
797826 * @return
0 commit comments