@@ -414,6 +414,67 @@ public NgxBlock buildBlockUpstream(Upstream upstream) {
414414 return ngxBlockServer ;
415415 }
416416
417+ public static Boolean processListenPort (Server server , NgxBlock ngxBlockServer , Boolean isIpv6 ) {
418+ if (isIpv6 && server .getIpv6 () != 1 ){
419+ return false ;
420+ }
421+ List <Integer > numbers = new ArrayList <>();
422+
423+ // 使用逗号分割字符串
424+ String [] partsByComma = server .getListen ().split ("," );
425+
426+ for (String part : partsByComma ) {
427+ String [] range = part .split ("-" );
428+ if (range .length == 2 ) {
429+ // 处理为范围的情况
430+ int start = Integer .parseInt (range [0 ]);
431+ int end = Integer .parseInt (range [1 ]);
432+
433+ if (start <= end ) {
434+ for (int i = start ; i <= end ; i ++) {
435+ numbers .add (i );
436+ }
437+ } else {
438+ for (int i = start ; i >= end ; i --) {
439+ numbers .add (i );
440+ }
441+ }
442+ } else {
443+ // 处理单个数字的情况
444+ int num = Integer .parseInt (part );
445+ numbers .add (num );
446+ }
447+ }
448+
449+ String listenKey = "listen " ;
450+ if (isIpv6 ){
451+ listenKey = "listen [::]:" ;
452+ }
453+
454+ String value = "" ;
455+ for (Integer port : numbers ) {
456+ NgxParam ngxParam = new NgxParam ();
457+ value = listenKey + port ;
458+ if (server .getDef () == 1 ) {
459+ value += " default_server" ;
460+ }
461+ if (server .getProxyProtocol () == 1 ) {
462+ value += " proxy_protocol" ;
463+ }
464+
465+ if (server .getSsl () == 1 ) {
466+ value += " ssl" ;
467+ if (server .getHttp2 () == 1 ) { // http2旧版写法
468+ value += " http2" ;
469+ }
470+ }
471+ ngxParam .addValue (value );
472+ ngxBlockServer .addEntry (ngxParam );
473+ }
474+ return true ;
475+
476+ }
477+
417478 public NgxBlock bulidBlockServer (Server server , ConfExt confExt ) {
418479 NgxParam ngxParam = null ;
419480
@@ -438,44 +499,10 @@ public NgxBlock bulidBlockServer(Server server, ConfExt confExt) {
438499 }
439500
440501 // 监听端口
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-
502+ processListenPort (server , ngxBlockServer , false );
459503 // 监控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- }
504+ processListenPort (server , ngxBlockServer , true );
469505
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- }
479506
480507 if (server .getSsl () == 1 && server .getHttp2 () == 2 ) { // http2新版写法
481508 ngxParam = new NgxParam ();
@@ -718,7 +745,7 @@ public NgxBlock bulidBlockServer(Server server, ConfExt confExt) {
718745
719746 /**
720747 * 配置ssl
721- *
748+ *
722749 * @param server
723750 * @param ngxBlockServer
724751 */
@@ -776,7 +803,7 @@ private void setServerSsl(Server server, NgxBlock ngxBlockServer) {
776803
777804 /**
778805 * 替换掉listen中的ip
779- *
806+ *
780807 * @param listen
781808 * @return
782809 */
@@ -791,7 +818,7 @@ private String replaceIp(String listen) {
791818
792819 /**
793820 * include防止重复
794- *
821+ *
795822 * @param ngxBlockHttp
796823 * @param ngxParam
797824 * @return
0 commit comments