mirror of
				https://github.com/caddyserver/caddy.git
				synced 2025-10-31 10:37:24 -04:00 
			
		
		
		
	caddyfile: Allow overriding server names (#5323)
This commit is contained in:
		
							parent
							
								
									e9d95ab29f
								
							
						
					
					
						commit
						7f2a93e6c3
					
				| @ -706,7 +706,7 @@ func (st *ServerType) serversFromPairings( | |||||||
| 
 | 
 | ||||||
| 	err := applyServerOptions(servers, options, warnings) | 	err := applyServerOptions(servers, options, warnings) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, fmt.Errorf("applying global server options: %v", err) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return servers, nil | 	return servers, nil | ||||||
|  | |||||||
| @ -33,6 +33,7 @@ type serverOptions struct { | |||||||
| 	ListenerAddress string | 	ListenerAddress string | ||||||
| 
 | 
 | ||||||
| 	// These will all map 1:1 to the caddyhttp.Server struct | 	// These will all map 1:1 to the caddyhttp.Server struct | ||||||
|  | 	Name                 string | ||||||
| 	ListenerWrappersRaw  []json.RawMessage | 	ListenerWrappersRaw  []json.RawMessage | ||||||
| 	ReadTimeout          caddy.Duration | 	ReadTimeout          caddy.Duration | ||||||
| 	ReadHeaderTimeout    caddy.Duration | 	ReadHeaderTimeout    caddy.Duration | ||||||
| @ -58,6 +59,15 @@ func unmarshalCaddyfileServerOptions(d *caddyfile.Dispenser) (any, error) { | |||||||
| 		} | 		} | ||||||
| 		for nesting := d.Nesting(); d.NextBlock(nesting); { | 		for nesting := d.Nesting(); d.NextBlock(nesting); { | ||||||
| 			switch d.Val() { | 			switch d.Val() { | ||||||
|  | 			case "name": | ||||||
|  | 				if serverOpts.ListenerAddress == "" { | ||||||
|  | 					return nil, d.Errf("cannot set a name for a server without a listener address") | ||||||
|  | 				} | ||||||
|  | 				if !d.NextArg() { | ||||||
|  | 					return nil, d.ArgErr() | ||||||
|  | 				} | ||||||
|  | 				serverOpts.Name = d.Val() | ||||||
|  | 
 | ||||||
| 			case "listener_wrappers": | 			case "listener_wrappers": | ||||||
| 				for nesting := d.Nesting(); d.NextBlock(nesting); { | 				for nesting := d.Nesting(); d.NextBlock(nesting); { | ||||||
| 					modID := "caddy.listeners." + d.Val() | 					modID := "caddy.listeners." + d.Val() | ||||||
| @ -248,7 +258,22 @@ func applyServerOptions( | |||||||
| 		return nil | 		return nil | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	for _, server := range servers { | 	// check for duplicate names, which would clobber the config | ||||||
|  | 	existingNames := map[string]bool{} | ||||||
|  | 	for _, opts := range serverOpts { | ||||||
|  | 		if opts.Name == "" { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		if existingNames[opts.Name] { | ||||||
|  | 			return fmt.Errorf("cannot use duplicate server name '%s'", opts.Name) | ||||||
|  | 		} | ||||||
|  | 		existingNames[opts.Name] = true | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// collect the server name overrides | ||||||
|  | 	nameReplacements := map[string]string{} | ||||||
|  | 
 | ||||||
|  | 	for key, server := range servers { | ||||||
| 		// find the options that apply to this server | 		// find the options that apply to this server | ||||||
| 		opts := func() *serverOptions { | 		opts := func() *serverOptions { | ||||||
| 			for _, entry := range serverOpts { | 			for _, entry := range serverOpts { | ||||||
| @ -287,6 +312,16 @@ func applyServerOptions( | |||||||
| 			} | 			} | ||||||
| 			server.Logs.ShouldLogCredentials = opts.ShouldLogCredentials | 			server.Logs.ShouldLogCredentials = opts.ShouldLogCredentials | ||||||
| 		} | 		} | ||||||
|  | 
 | ||||||
|  | 		if opts.Name != "" { | ||||||
|  | 			nameReplacements[key] = opts.Name | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// rename the servers if marked to do so | ||||||
|  | 	for old, new := range nameReplacements { | ||||||
|  | 		servers[new] = servers[old] | ||||||
|  | 		delete(servers, old) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return nil | 	return nil | ||||||
|  | |||||||
							
								
								
									
										77
									
								
								caddytest/integration/caddyfile_adapt/server_names.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								caddytest/integration/caddyfile_adapt/server_names.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,77 @@ | |||||||
|  | { | ||||||
|  | 	servers :443 { | ||||||
|  | 		name https | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	servers :8000 { | ||||||
|  | 		name app1 | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	servers :8001 { | ||||||
|  | 		name app2 | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	servers 123.123.123.123:8002 { | ||||||
|  | 		name bind-server | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | example.com { | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | :8000 { | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | :8001, :8002 { | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | :8002 { | ||||||
|  | 	bind 123.123.123.123 222.222.222.222 | ||||||
|  | } | ||||||
|  | ---------- | ||||||
|  | { | ||||||
|  | 	"apps": { | ||||||
|  | 		"http": { | ||||||
|  | 			"servers": { | ||||||
|  | 				"app1": { | ||||||
|  | 					"listen": [ | ||||||
|  | 						":8000" | ||||||
|  | 					] | ||||||
|  | 				}, | ||||||
|  | 				"app2": { | ||||||
|  | 					"listen": [ | ||||||
|  | 						":8001" | ||||||
|  | 					] | ||||||
|  | 				}, | ||||||
|  | 				"bind-server": { | ||||||
|  | 					"listen": [ | ||||||
|  | 						"123.123.123.123:8002", | ||||||
|  | 						"222.222.222.222:8002" | ||||||
|  | 					] | ||||||
|  | 				}, | ||||||
|  | 				"https": { | ||||||
|  | 					"listen": [ | ||||||
|  | 						":443" | ||||||
|  | 					], | ||||||
|  | 					"routes": [ | ||||||
|  | 						{ | ||||||
|  | 							"match": [ | ||||||
|  | 								{ | ||||||
|  | 									"host": [ | ||||||
|  | 										"example.com" | ||||||
|  | 									] | ||||||
|  | 								} | ||||||
|  | 							], | ||||||
|  | 							"terminal": true | ||||||
|  | 						} | ||||||
|  | 					] | ||||||
|  | 				}, | ||||||
|  | 				"srv4": { | ||||||
|  | 					"listen": [ | ||||||
|  | 						":8002" | ||||||
|  | 					] | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user