Caddy API returns 200 but Connection refused

1. The problem I’m having:

I am trying to build a CLL that helps folks deploy custom domains with SSL to their reverse proxy server, I want to integrate caddy; when I install caddy and run curl localhost, I get the default caddy page showing it works. Now, when i send a payload over the API, it returns 200, but it does not work and shows it fails

2. Error messages and/or full log output:

 caddy.service - Caddy
     Loaded: loaded (/lib/systemd/system/caddy.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Mon 2023-10-30 05:51:23 UTC; 51min ago
       Docs: https://caddyserver.com/docs/
   Main PID: 2321013 (code=exited, status=1/FAILURE)
     Status: "loading new config: starting caddy administration endpoint: listen tcp 127.0.0.1:2019: bind: ad>
        CPU: 73ms

Oct 30 05:51:23 triggr caddy[2321013]: LOGNAME=caddy
Oct 30 05:51:23 triggr caddy[2321013]: USER=caddy
Oct 30 05:51:23 triggr caddy[2321013]: INVOCATION_ID=735bc805ae7e4ba1af70eaba18f05af5
Oct 30 05:51:23 triggr caddy[2321013]: JOURNAL_STREAM=8:13911706
Oct 30 05:51:23 triggr caddy[2321013]: SYSTEMD_EXEC_PID=2321013
Oct 30 05:51:23 triggr caddy[2321013]: {"level":"info","ts":1698645083.0637424,"msg":"using provided configur>
Oct 30 05:51:23 triggr caddy[2321013]: Error: loading initial config: loading new config: starting caddy admi>
Oct 30 05:51:23 triggr systemd[1]: caddy.service: Main process exited, code=exited, status=1/FAILURE
Oct 30 05:51:23 triggr systemd[1]: caddy.service: Failed with result 'exit-code'.
Oct 30 05:51:23 triggr systemd[1]: Failed to start Caddy.

3. Caddy version:

caddy version
v2.7.5 h1:HoysvZkLcN2xJExEepaFHK92Qgs7xAiCFydN5x5Hs6Q=

4. How I installed and ran Caddy:

I followed the official docs, and it installed without issue

a. System environment:

Linux triggr 6.2.0-1013-gcp #13~22.04.1-Ubuntu SMP Wed Aug 30 20:41:15 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

b. Command:

I didn’t use command, i use the API running on 2019

c. Service/unit/compose file:

d. My complete Caddy config:

this is my code code
In this context,

domain is example.com
target is https://localhost:3000

package server

type CaddyConfig struct {
	Apps struct {
		HTTP struct {
			Servers struct {
				Srv0 struct {
					Routes []struct {
						Match []struct {
							Host []string `json:"host"`
						} `json:"match"`
						Handle []struct {
							Handler string `json:"handler"`
							Upstreams []struct {
								Dial string `json:"dial"`
							} `json:"upstreams"`
						} `json:"handle"`
					} `json:"routes"`
				} `json:"srv0"`
			} `json:"servers"`
		} `json:"http"`
	} `json:"apps"`
}

func CaddySetup(domain, target string) error {

	// Create a new Caddy configuration
	config := CaddyConfig{}
	config.Apps.HTTP.Servers.Srv0.Routes = append(config.Apps.HTTP.Servers.Srv0.Routes, struct {
		Match []struct {
			Host []string `json:"host"`
		} `json:"match"`
		Handle []struct {
			Handler string `json:"handler"`
			Upstreams []struct {
				Dial string `json:"dial"`
			} `json:"upstreams"`
		} `json:"handle"`
	}{
		Match: []struct {
			Host []string `json:"host"`
		}{
			{
				Host: []string{domain},
			},
		},
		Handle: []struct {
			Handler string `json:"handler"`
			Upstreams []struct {
				Dial string `json:"dial"`
			} `json:"upstreams"`
		}{
			{
				Handler: "reverse_proxy",
				Upstreams: []struct {
					Dial string `json:"dial"`
				}{
					{
						Dial: target,
					},
				},
			},
		},
	})

	// Convert the configuration to JSON
	jsonData, err := json.Marshal(config)
	if err != nil {
		return fmt.Errorf("Failed to convert configuration to JSON: %v", err)
	}

	// Make a POST request to the Caddy API
	resp, err := http.Post("http://localhost:2019/load", "application/json", bytes.NewBuffer(jsonData))
	if err != nil {
		return fmt.Errorf("Failed to make request to Caddy API: %v", err)
	}
	defer resp.Body.Close()

	if resp.StatusCode != http.StatusOK {
		return fmt.Errorf("Caddy API returned non-200 status code: %d", resp.StatusCode)
	}

	return nil
}

The error message is truncated, so I can’t effectively help.

Please see Keep Caddy Running — Caddy Documentation which has the right command to use to see your log output.

I ran journalctl -u caddy --no-pager | less +G



Oct 30 03:46:07 triggr systemd[1]: caddy.service: Deactivated successfully.
Oct 30 03:46:07 triggr systemd[1]: caddy.service: Consumed 5.721s CPU time.
Oct 30 03:51:08 triggr systemd[1]: Starting Caddy...
Oct 30 03:51:08 triggr caddy[2314662]: caddy.HomeDir=/var/lib/caddy
Oct 30 03:51:08 triggr caddy[2314662]: caddy.AppDataDir=/var/lib/caddy/.local/share/caddy
Oct 30 03:51:08 triggr caddy[2314662]: caddy.AppConfigDir=/var/lib/caddy/.config/caddy
Oct 30 03:51:08 triggr caddy[2314662]: caddy.ConfigAutosavePath=/var/lib/caddy/.config/caddy/autosave.json
Oct 30 03:51:08 triggr caddy[2314662]: caddy.Version=v2.7.5 h1:HoysvZkLcN2xJExEepaFHK92Qgs7xAiCFydN5x5Hs6Q=
Oct 30 03:51:08 triggr caddy[2314662]: runtime.GOOS=linux
Oct 30 03:51:08 triggr caddy[2314662]: runtime.GOARCH=amd64
Oct 30 03:51:08 triggr caddy[2314662]: runtime.Compiler=gc
Oct 30 03:51:08 triggr caddy[2314662]: runtime.NumCPU=2
Oct 30 03:51:08 triggr caddy[2314662]: runtime.GOMAXPROCS=2
Oct 30 03:51:08 triggr caddy[2314662]: runtime.Version=go1.21.3
Oct 30 03:51:08 triggr caddy[2314662]: os.Getwd=/
Oct 30 03:51:08 triggr caddy[2314662]: LANG=C.UTF-8
Oct 30 03:51:08 triggr caddy[2314662]: PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
Oct 30 03:51:08 triggr caddy[2314662]: NOTIFY_SOCKET=/run/systemd/notify
Oct 30 03:51:08 triggr caddy[2314662]: HOME=/var/lib/caddy
Oct 30 03:51:08 triggr caddy[2314662]: LOGNAME=caddy
Oct 30 03:51:08 triggr caddy[2314662]: USER=caddy
Oct 30 03:51:08 triggr caddy[2314662]: INVOCATION_ID=834aacf59f7144b0bcf31e4776bdabdd
Oct 30 03:51:08 triggr caddy[2314662]: JOURNAL_STREAM=8:13868227
Oct 30 03:51:08 triggr caddy[2314662]: SYSTEMD_EXEC_PID=2314662
Oct 30 03:51:08 triggr caddy[2314662]: {"level":"info","ts":1698637868.580558,"msg":"using provided configuration","config_file":"/etc/caddy/Caddyfile","config_adapter":""}
Oct 30 03:51:08 triggr caddy[2314662]: {"level":"info","ts":1698637868.5843325,"logger":"admin","msg":"admin endpoint started","address":"localhost:2019","enforce_origin":false,"origins":["//localhost:2019","//[::1]:2019","//127.0.0.1:2019"]}
Oct 30 03:51:08 triggr caddy[2314662]: {"level":"warn","ts":1698637868.5846622,"logger":"http.auto_https","msg":"server is listening only on the HTTP port, so no automatic HTTPS will be applied to this server","server_name":"srv0","http_port":80}
Oct 30 03:51:08 triggr caddy[2314662]: {"level":"info","ts":1698637868.5852318,"logger":"http.log","msg":"server running","name":"srv0","protocols":["h1","h2","h3"]}
Oct 30 03:51:08 triggr caddy[2314662]: {"level":"info","ts":1698637868.5856423,"logger":"tls.cache.maintenance","msg":"started background certificate maintenance","cache":"0xc000284e80"}
Oct 30 03:51:08 triggr caddy[2314662]: {"level":"info","ts":1698637868.5859134,"msg":"autosaved config (load with --resume flag)","file":"/var/lib/caddy/.config/caddy/autosave.json"}
Oct 30 03:51:08 triggr caddy[2314662]: {"level":"info","ts":1698637868.586025,"msg":"serving initial configuration"}
Oct 30 03:51:08 triggr systemd[1]: Started Caddy.
Oct 30 03:51:08 triggr caddy[2314662]: {"level":"info","ts":1698637868.586648,"logger":"tls","msg":"cleaning storage unit","description":"FileStorage:/var/lib/caddy/.local/share/caddy"}
Oct 30 03:51:08 triggr caddy[2314662]: {"level":"info","ts":1698637868.5896006,"logger":"tls","msg":"finished cleaning storage units"}
Oct 30 03:51:13 triggr caddy[2314662]: {"level":"info","ts":1698637873.2184496,"logger":"admin.api","msg":"received request","method":"POST","host":"localhost:2019","uri":"/load","remote_ip":"127.0.0.1","remote_port":"43954","headers":{"Accept-Encoding":["gzip"],"Content-Length":["255"],"Content-Type":["application/json"],"Origin":["http://localhost:2019"],"User-Agent":["Go-http-client/1.1"]}}
Oct 30 03:51:13 triggr caddy[2314662]: {"level":"info","ts":1698637873.2196274,"logger":"admin","msg":"admin endpoint started","address":"localhost:2019","enforce_origin":false,"origins":["//localhost:2019","//[::1]:2019","//127.0.0.1:2019"]}
Oct 30 03:51:13 triggr caddy[2314662]: {"level":"info","ts":1698637873.2198339,"logger":"http.auto_https","msg":"server is listening only on the HTTPS port but has no TLS connection policies; adding one to enable TLS","server_name":"srv0","https_port":443}
Oct 30 03:51:13 triggr caddy[2314662]: {"level":"info","ts":1698637873.2198572,"logger":"http.auto_https","msg":"enabling automatic HTTP->HTTPS redirects","server_name":"srv0"}
Oct 30 03:51:13 triggr caddy[2314662]: {"level":"info","ts":1698637873.2208517,"logger":"http","msg":"enabling HTTP/3 listener","addr":":443"}
Oct 30 03:51:13 triggr caddy[2314662]: {"level":"info","ts":1698637873.2221007,"logger":"http.log","msg":"server running","name":"srv0","protocols":["h1","h2","h3"]}
Oct 30 03:51:13 triggr caddy[2314662]: {"level":"info","ts":1698637873.2224126,"logger":"http.log","msg":"server running","name":"remaining_auto_https_redirects","protocols":["h1","h2","h3"]}
Oct 30 03:51:13 triggr caddy[2314662]: {"level":"info","ts":1698637873.222428,"logger":"http","msg":"enabling automatic TLS certificate management","domains":["trig.iamobinna.com"]}
Oct 30 03:51:13 triggr caddy[2314662]: {"level":"info","ts":1698637873.224157,"logger":"http","msg":"servers shutting down with eternal grace period"}
Oct 30 03:51:13 triggr caddy[2314662]: {"level":"info","ts":1698637873.224571,"msg":"autosaved config (load with --resume flag)","file":"/var/lib/caddy/.config/caddy/autosave.json"}
Oct 30 03:51:13 triggr caddy[2314662]: {"level":"info","ts":1698637873.2248662,"logger":"admin.api","msg":"load complete"}
Oct 30 03:51:13 triggr caddy[2314662]: {"level":"info","ts":1698637873.2304401,"logger":"admin","msg":"stopped previous server","address":"localhost:2019"}
Oct 30 03:54:07 triggr caddy[2314662]: {"level":"info","ts":1698638047.9424276,"msg":"shutting down apps, then terminating","signal":"SIGTERM"}
Oct 30 03:54:07 triggr caddy[2314662]: {"level":"warn","ts":1698638047.9426591,"msg":"exiting; byeee!! 👋","signal":"SIGTERM"}
Oct 30 03:54:07 triggr caddy[2314662]: {"level":"info","ts":1698638047.9428897,"logger":"http","msg":"servers shutting down with eternal grace period"}
Oct 30 03:54:07 triggr systemd[1]: Stopping Caddy...
Oct 30 03:54:08 triggr caddy[2314662]: {"level":"info","ts":1698638048.2117739,"logger":"admin","msg":"stopped previous server","address":"localhost:2019"}
Oct 30 03:54:08 triggr caddy[2314662]: {"level":"info","ts":1698638048.2118294,"msg":"shutdown complete","signal":"SIGTERM","exit_code":0}
Oct 30 03:54:08 triggr systemd[1]: caddy.service: Deactivated successfully.
Oct 30 03:54:08 triggr systemd[1]: Stopped Caddy.
Oct 30 03:54:20 triggr systemd[1]: Starting Caddy...
Oct 30 03:54:20 triggr caddy[2314802]: caddy.HomeDir=/var/lib/caddy
Oct 30 03:54:20 triggr caddy[2314802]: caddy.AppDataDir=/var/lib/caddy/.local/share/caddy
Oct 30 03:54:20 triggr caddy[2314802]: caddy.AppConfigDir=/var/lib/caddy/.config/caddy
Oct 30 03:54:20 triggr caddy[2314802]: caddy.ConfigAutosavePath=/var/lib/caddy/.config/caddy/autosave.json
Oct 30 03:54:20 triggr caddy[2314802]: caddy.Version=v2.7.5 h1:HoysvZkLcN2xJExEepaFHK92Qgs7xAiCFydN5x5Hs6Q=
Oct 30 03:54:20 triggr caddy[2314802]: runtime.GOOS=linux
Oct 30 03:54:20 triggr caddy[2314802]: runtime.GOARCH=amd64
Oct 30 03:54:20 triggr caddy[2314802]: runtime.Compiler=gc
Oct 30 03:54:20 triggr caddy[2314802]: runtime.NumCPU=2
Oct 30 03:54:20 triggr caddy[2314802]: runtime.GOMAXPROCS=2
Oct 30 03:54:20 triggr caddy[2314802]: runtime.Version=go1.21.3
Oct 30 03:54:20 triggr caddy[2314802]: os.Getwd=/
Oct 30 03:54:20 triggr caddy[2314802]: LANG=C.UTF-8
Oct 30 03:54:20 triggr caddy[2314802]: PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
Oct 30 03:54:20 triggr caddy[2314802]: NOTIFY_SOCKET=/run/systemd/notify
Oct 30 03:54:20 triggr caddy[2314802]: HOME=/var/lib/caddy
Oct 30 03:54:20 triggr caddy[2314802]: LOGNAME=caddy
Oct 30 03:54:20 triggr caddy[2314802]: USER=caddy
Oct 30 03:54:20 triggr caddy[2314802]: INVOCATION_ID=e26423ad3c0d4612bce39d42a0ab20bb
Oct 30 03:54:20 triggr caddy[2314802]: JOURNAL_STREAM=8:13868562
Oct 30 03:54:20 triggr caddy[2314802]: SYSTEMD_EXEC_PID=2314802
Oct 30 03:54:20 triggr caddy[2314802]: {"level":"info","ts":1698638060.683224,"msg":"using provided configuration","config_file":"/etc/caddy/Caddyfile","config_adapter":""}
Oct 30 03:54:20 triggr caddy[2314802]: {"level":"info","ts":1698638060.6856084,"logger":"admin","msg":"admin endpoint started","address":"localhost:2019","enforce_origin":false,"origins":["//127.0.0.1:2019","//localhost:2019","//[::1]:2019"]}
Oct 30 03:54:20 triggr caddy[2314802]: {"level":"warn","ts":1698638060.6857765,"logger":"http.auto_https","msg":"server is listening only on the HTTP port, so no automatic HTTPS will be applied to this server","server_name":"srv0","http_port":80}
Oct 30 03:54:20 triggr caddy[2314802]: {"level":"info","ts":1698638060.6861124,"logger":"http.log","msg":"server running","name":"srv0","protocols":["h1","h2","h3"]}
Oct 30 03:54:20 triggr caddy[2314802]: {"level":"info","ts":1698638060.6864572,"msg":"autosaved config (load with --resume flag)","file":"/var/lib/caddy/.config/caddy/autosave.json"}
Oct 30 03:54:20 triggr systemd[1]: Started Caddy.
Oct 30 03:54:20 triggr caddy[2314802]: {"level":"info","ts":1698638060.6876566,"logger":"tls.cache.maintenance","msg":"started background certificate maintenance","cache":"0xc00032c600"}
Oct 30 03:54:20 triggr caddy[2314802]: {"level":"info","ts":1698638060.6879215,"logger":"tls","msg":"cleaning storage unit","description":"FileStorage:/var/lib/caddy/.local/share/caddy"}
Oct 30 03:54:20 triggr caddy[2314802]: {"level":"info","ts":1698638060.6889293,"msg":"serving initial configuration"}
Oct 30 03:54:20 triggr caddy[2314802]: {"level":"info","ts":1698638060.6892607,"logger":"tls","msg":"finished cleaning storage units"}
Oct 30 03:54:57 triggr caddy[2314802]: {"level":"info","ts":1698638097.2607245,"logger":"admin.api","msg":"received request","method":"POST","host":"localhost:2019","uri":"/load","remote_ip":"127.0.0.1","remote_port":"46858","headers":{"Accept-Encoding":["gzip"],"Content-Length":["255"],"Content-Type":["application/json"],"Origin":["http://localhost:2019"],"User-Agent":["Go-http-client/1.1"]}}
Oct 30 03:54:57 triggr caddy[2314802]: {"level":"info","ts":1698638097.2637255,"logger":"admin","msg":"admin endpoint started","address":"localhost:2019","enforce_origin":false,"origins":["//localhost:2019","//[::1]:2019","//127.0.0.1:2019"]}
Oct 30 03:54:57 triggr caddy[2314802]: {"level":"info","ts":1698638097.2639983,"logger":"http.auto_https","msg":"server is listening only on the HTTPS port but has no TLS connection policies; adding one to enable TLS","server_name":"srv0","https_port":443}
Oct 30 03:54:57 triggr caddy[2314802]: {"level":"info","ts":1698638097.2640433,"logger":"http.auto_https","msg":"enabling automatic HTTP->HTTPS redirects","server_name":"srv0"}
Oct 30 03:54:57 triggr caddy[2314802]: {"level":"info","ts":1698638097.267145,"logger":"http","msg":"enabling HTTP/3 listener","addr":":443"}
Oct 30 03:54:57 triggr caddy[2314802]: {"level":"info","ts":1698638097.2674522,"logger":"http.log","msg":"server running","name":"srv0","protocols":["h1","h2","h3"]}
Oct 30 03:54:57 triggr caddy[2314802]: {"level":"info","ts":1698638097.2677996,"logger":"http.log","msg":"server running","name":"remaining_auto_https_redirects","protocols":["h1","h2","h3"]}
Oct 30 03:54:57 triggr caddy[2314802]: {"level":"info","ts":1698638097.2679553,"logger":"http","msg":"enabling automatic TLS certificate management","domains":["trig.iamobinna.com"]}
Oct 30 03:54:57 triggr caddy[2314802]: {"level":"info","ts":1698638097.2689366,"logger":"http","msg":"servers shutting down with eternal grace period"}
Oct 30 03:54:57 triggr caddy[2314802]: {"level":"info","ts":1698638097.2693546,"msg":"autosaved config (load with --resume flag)","file":"/var/lib/caddy/.config/caddy/autosave.json"}
Oct 30 03:54:57 triggr caddy[2314802]: {"level":"info","ts":1698638097.2696538,"logger":"admin.api","msg":"load complete"}
Oct 30 03:54:57 triggr caddy[2314802]: {"level":"info","ts":1698638097.2753625,"logger":"admin","msg":"stopped previous server","address":"localhost:2019"}
Oct 30 03:55:37 triggr caddy[2314802]: {"level":"info","ts":1698638137.4475975,"logger":"admin.api","msg":"received request","method":"POST","host":"localhost:2019","uri":"/stop","remote_ip":"127.0.0.1","remote_port":"49016","headers":{"Accept-Encoding":["gzip"],"Content-Length":["0"],"Origin":["http://localhost:2019"],"User-Agent":["Go-http-client/1.1"]}}
Oct 30 03:55:37 triggr caddy[2314802]: {"level":"warn","ts":1698638137.4494092,"logger":"admin.api","msg":"exiting; byeee!! 👋"}
Oct 30 03:55:37 triggr caddy[2314802]: {"level":"info","ts":1698638137.4494433,"logger":"http","msg":"servers shutting down with eternal grace period"}
Oct 30 03:55:37 triggr caddy[2314802]: {"level":"info","ts":1698638137.7232268,"logger":"admin","msg":"stopped previous server","address":"localhost:2019"}
Oct 30 03:55:37 triggr caddy[2314802]: {"level":"info","ts":1698638137.7232914,"logger":"admin.api","msg":"shutdown complete","exit_code":0}
Oct 30 03:55:37 triggr systemd[1]: caddy.service: Deactivated successfully.
Oct 30 03:57:36 triggr systemd[1]: Starting Caddy...
Oct 30 03:57:36 triggr caddy[2315053]: caddy.HomeDir=/var/lib/caddy
Oct 30 03:57:36 triggr caddy[2315053]: caddy.AppDataDir=/var/lib/caddy/.local/share/caddy
Oct 30 03:57:36 triggr caddy[2315053]: caddy.AppConfigDir=/var/lib/caddy/.config/caddy
Oct 30 03:57:36 triggr caddy[2315053]: caddy.ConfigAutosavePath=/var/lib/caddy/.config/caddy/autosave.json
Oct 30 03:57:36 triggr caddy[2315053]: caddy.Version=v2.7.5 h1:HoysvZkLcN2xJExEepaFHK92Qgs7xAiCFydN5x5Hs6Q=
Oct 30 03:57:36 triggr caddy[2315053]: runtime.GOOS=linux
Oct 30 03:57:36 triggr caddy[2315053]: runtime.GOARCH=amd64
Oct 30 03:57:36 triggr caddy[2315053]: runtime.Compiler=gc
Oct 30 03:57:36 triggr caddy[2315053]: runtime.NumCPU=2
Oct 30 03:57:36 triggr caddy[2315053]: runtime.GOMAXPROCS=2
Oct 30 03:57:36 triggr caddy[2315053]: runtime.Version=go1.21.3
Oct 30 03:57:36 triggr caddy[2315053]: os.Getwd=/
Oct 30 03:57:36 triggr caddy[2315053]: LANG=C.UTF-8
Oct 30 03:57:36 triggr caddy[2315053]: PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
Oct 30 03:57:36 triggr caddy[2315053]: NOTIFY_SOCKET=/run/systemd/notify
Oct 30 03:57:36 triggr caddy[2315053]: HOME=/var/lib/caddy
Oct 30 03:57:36 triggr caddy[2315053]: LOGNAME=caddy
Oct 30 03:57:36 triggr caddy[2315053]: USER=caddy
Oct 30 03:57:36 triggr caddy[2315053]: INVOCATION_ID=ec5b5b3e95e443068ca9973061faceac
Oct 30 03:57:36 triggr caddy[2315053]: JOURNAL_STREAM=8:13869161
Oct 30 03:57:36 triggr caddy[2315053]: SYSTEMD_EXEC_PID=2315053
Oct 30 03:57:36 triggr caddy[2315053]: {"level":"info","ts":1698638256.3402247,"msg":"using provided configuration","config_file":"/etc/caddy/Caddyfile","config_adapter":""}
Oct 30 03:57:36 triggr caddy[2315053]: {"level":"info","ts":1698638256.3428435,"logger":"admin","msg":"admin endpoint started","address":"localhost:2019","enforce_origin":false,"origins":["//localhost:2019","//[::1]:2019","//127.0.0.1:2019"]}
Oct 30 03:57:36 triggr caddy[2315053]: {"level":"warn","ts":1698638256.3430324,"logger":"http.auto_https","msg":"server is listening only on the HTTP port, so no automatic HTTPS will be applied to this server","server_name":"srv0","http_port":80}
Oct 30 03:57:36 triggr caddy[2315053]: {"level":"info","ts":1698638256.3433352,"logger":"http.log","msg":"server running","name":"srv0","protocols":["h1","h2","h3"]}
Oct 30 03:57:36 triggr caddy[2315053]: {"level":"info","ts":1698638256.3436043,"msg":"autosaved config (load with --resume flag)","file":"/var/lib/caddy/.config/caddy/autosave.json"}
Oct 30 03:57:36 triggr caddy[2315053]: {"level":"info","ts":1698638256.343691,"msg":"serving initial configuration"}
Oct 30 03:57:36 triggr caddy[2315053]: {"level":"info","ts":1698638256.3437688,"logger":"tls","msg":"cleaning storage unit","description":"FileStorage:/var/lib/caddy/.local/share/caddy"}
Oct 30 03:57:36 triggr caddy[2315053]: {"level":"info","ts":1698638256.3448524,"logger":"tls","msg":"finished cleaning storage units"}
Oct 30 03:57:36 triggr systemd[1]: Started Caddy.
Oct 30 03:57:36 triggr caddy[2315053]: {"level":"info","ts":1698638256.3435931,"logger":"tls.cache.maintenance","msg":"started background certificate maintenance","cache":"0xc00042fe80"}
Oct 30 03:57:38 triggr caddy[2315053]: {"level":"info","ts":1698638258.297396,"logger":"admin.api","msg":"received request","method":"POST","host":"localhost:2019","uri":"/load","remote_ip":"127.0.0.1","remote_port":"54226","headers":{"Accept-Encoding":["gzip"],"Content-Length":["255"],"Content-Type":["application/json"],"Origin":["http://localhost:2019"],"User-Agent":["Go-http-client/1.1"]}}
Oct 30 03:57:38 triggr caddy[2315053]: {"level":"info","ts":1698638258.2983317,"logger":"admin","msg":"admin endpoint started","address":"localhost:2019","enforce_origin":false,"origins":["//localhost:2019","//[::1]:2019","//127.0.0.1:2019"]}
Oct 30 03:57:38 triggr caddy[2315053]: {"level":"info","ts":1698638258.2990599,"logger":"http.auto_https","msg":"server is listening only on the HTTPS port but has no TLS connection policies; adding one to enable TLS","server_name":"srv0","https_port":443}
Oct 30 03:57:38 triggr caddy[2315053]: {"level":"info","ts":1698638258.299303,"logger":"http.auto_https","msg":"enabling automatic HTTP->HTTPS redirects","server_name":"srv0"}
Oct 30 03:57:38 triggr caddy[2315053]: {"level":"info","ts":1698638258.3001842,"logger":"http","msg":"enabling HTTP/3 listener","addr":":443"}
Oct 30 03:57:38 triggr caddy[2315053]: {"level":"info","ts":1698638258.3005202,"logger":"http.log","msg":"server running","name":"srv0","protocols":["h1","h2","h3"]}
Oct 30 03:57:38 triggr caddy[2315053]: {"level":"info","ts":1698638258.3006008,"logger":"http.log","msg":"server running","name":"remaining_auto_https_redirects","protocols":["h1","h2","h3"]}
Oct 30 03:57:38 triggr caddy[2315053]: {"level":"info","ts":1698638258.300611,"logger":"http","msg":"enabling automatic TLS certificate management","domains":["trig.iamobinna.com"]}
Oct 30 03:57:38 triggr caddy[2315053]: {"level":"info","ts":1698638258.3016248,"logger":"http","msg":"servers shutting down with eternal grace period"}
Oct 30 03:57:38 triggr caddy[2315053]: {"level":"info","ts":1698638258.3020446,"msg":"autosaved config (load with --resume flag)","file":"/var/lib/caddy/.config/caddy/autosave.json"}
Oct 30 03:57:38 triggr caddy[2315053]: {"level":"info","ts":1698638258.3022802,"logger":"admin.api","msg":"load complete"}
Oct 30 03:57:38 triggr caddy[2315053]: {"level":"info","ts":1698638258.3037343,"logger":"admin","msg":"stopped previous server","address":"localhost:2019"}
Oct 30 03:58:45 triggr systemd[1]: Stopping Caddy...
Oct 30 03:58:45 triggr caddy[2315053]: {"level":"info","ts":1698638325.5693045,"msg":"shutting down apps, then terminating","signal":"SIGTERM"}
Oct 30 03:58:45 triggr caddy[2315053]: {"level":"warn","ts":1698638325.5695133,"msg":"exiting; byeee!! 👋","signal":"SIGTERM"}
Oct 30 03:58:45 triggr caddy[2315053]: {"level":"info","ts":1698638325.56959,"logger":"http","msg":"servers shutting down with eternal grace period"}
Oct 30 03:58:45 triggr caddy[2315053]: {"level":"info","ts":1698638325.5699108,"logger":"admin","msg":"stopped previous server","address":"localhost:2019"}
Oct 30 03:58:45 triggr caddy[2315053]: {"level":"info","ts":1698638325.5699286,"msg":"shutdown complete","signal":"SIGTERM","exit_code":0}
Oct 30 03:58:45 triggr systemd[1]: caddy.service: Deactivated successfully.
Oct 30 03:58:45 triggr systemd[1]: Stopped Caddy.
Oct 30 04:26:27 triggr systemd[1]: Starting Caddy...
Oct 30 04:26:27 triggr caddy[2316432]: caddy.HomeDir=/var/lib/caddy
Oct 30 04:26:27 triggr caddy[2316432]: caddy.AppDataDir=/var/lib/caddy/.local/share/caddy
Oct 30 04:26:27 triggr caddy[2316432]: caddy.AppConfigDir=/var/lib/caddy/.config/caddy
Oct 30 04:26:27 triggr caddy[2316432]: caddy.ConfigAutosavePath=/var/lib/caddy/.config/caddy/autosave.json
Oct 30 04:26:27 triggr caddy[2316432]: caddy.Version=v2.7.5 h1:HoysvZkLcN2xJExEepaFHK92Qgs7xAiCFydN5x5Hs6Q=
Oct 30 04:26:27 triggr caddy[2316432]: runtime.GOOS=linux
Oct 30 04:26:27 triggr caddy[2316432]: runtime.GOARCH=amd64
Oct 30 04:26:27 triggr caddy[2316432]: runtime.Compiler=gc
Oct 30 04:26:27 triggr caddy[2316432]: runtime.NumCPU=2
Oct 30 04:26:27 triggr caddy[2316432]: runtime.GOMAXPROCS=2
Oct 30 04:26:27 triggr caddy[2316432]: runtime.Version=go1.21.3
Oct 30 04:26:27 triggr caddy[2316432]: os.Getwd=/
Oct 30 04:26:27 triggr caddy[2316432]: LANG=C.UTF-8
Oct 30 04:26:27 triggr caddy[2316432]: PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
Oct 30 04:26:27 triggr caddy[2316432]: NOTIFY_SOCKET=/run/systemd/notify
Oct 30 04:26:27 triggr caddy[2316432]: HOME=/var/lib/caddy
Oct 30 04:26:27 triggr caddy[2316432]: LOGNAME=caddy
Oct 30 04:26:27 triggr caddy[2316432]: USER=caddy
Oct 30 04:26:27 triggr caddy[2316432]: INVOCATION_ID=459a332383ba4c82a34cdc686f4eee72
Oct 30 04:26:27 triggr caddy[2316432]: JOURNAL_STREAM=8:13877949
Oct 30 04:26:27 triggr caddy[2316432]: SYSTEMD_EXEC_PID=2316432
Oct 30 04:26:27 triggr caddy[2316432]: {"level":"info","ts":1698639987.9060867,"msg":"using provided configuration","config_file":"/etc/caddy/Caddyfile","config_adapter":""}
Oct 30 04:26:27 triggr caddy[2316432]: Error: loading initial config: loading new config: starting caddy administration endpoint: listen tcp 127.0.0.1:2019: bind: address already in use
Oct 30 04:26:27 triggr systemd[1]: caddy.service: Main process exited, code=exited, status=1/FAILURE
Oct 30 04:26:27 triggr systemd[1]: caddy.service: Failed with result 'exit-code'.
Oct 30 04:26:27 triggr systemd[1]: Failed to start Caddy.
Oct 30 04:32:21 triggr systemd[1]: caddy.service: Unit cannot be reloaded because it is inactive.
Oct 30 04:37:55 triggr systemd[1]: Starting Caddy...
Oct 30 04:37:55 triggr caddy[2317950]: caddy.HomeDir=/var/lib/caddy
Oct 30 04:37:55 triggr caddy[2317950]: caddy.AppDataDir=/var/lib/caddy/.local/share/caddy
Oct 30 04:37:55 triggr caddy[2317950]: caddy.AppConfigDir=/var/lib/caddy/.config/caddy
Oct 30 04:37:55 triggr caddy[2317950]: caddy.ConfigAutosavePath=/var/lib/caddy/.config/caddy/autosave.json
Oct 30 04:37:55 triggr caddy[2317950]: caddy.Version=v2.7.5 h1:HoysvZkLcN2xJExEepaFHK92Qgs7xAiCFydN5x5Hs6Q=
Oct 30 04:37:55 triggr caddy[2317950]: runtime.GOOS=linux
Oct 30 04:37:55 triggr caddy[2317950]: runtime.GOARCH=amd64
Oct 30 04:37:55 triggr caddy[2317950]: runtime.Compiler=gc
Oct 30 04:37:55 triggr caddy[2317950]: runtime.NumCPU=2
Oct 30 04:37:55 triggr caddy[2317950]: runtime.GOMAXPROCS=2
Oct 30 04:37:55 triggr caddy[2317950]: runtime.Version=go1.21.3
Oct 30 04:37:55 triggr caddy[2317950]: os.Getwd=/
Oct 30 04:37:55 triggr caddy[2317950]: LANG=C.UTF-8
Oct 30 04:37:55 triggr caddy[2317950]: PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
Oct 30 04:37:55 triggr caddy[2317950]: NOTIFY_SOCKET=/run/systemd/notify
Oct 30 04:37:55 triggr caddy[2317950]: HOME=/var/lib/caddy
Oct 30 04:37:55 triggr caddy[2317950]: LOGNAME=caddy
Oct 30 04:37:55 triggr caddy[2317950]: USER=caddy
Oct 30 04:37:55 triggr caddy[2317950]: INVOCATION_ID=63b33af5055043f2b7e26f21ba1eb897
Oct 30 04:37:55 triggr caddy[2317950]: JOURNAL_STREAM=8:13890593
Oct 30 04:37:55 triggr caddy[2317950]: SYSTEMD_EXEC_PID=2317950
Oct 30 04:37:55 triggr caddy[2317950]: {"level":"info","ts":1698640675.4409306,"msg":"using provided configuration","config_file":"/etc/caddy/Caddyfile","config_adapter":""}
Oct 30 04:37:55 triggr caddy[2317950]: Error: loading initial config: loading new config: starting caddy administration endpoint: listen tcp 127.0.0.1:2019: bind: address already in use
Oct 30 04:37:55 triggr systemd[1]: caddy.service: Main process exited, code=exited, status=1/FAILURE
Oct 30 04:37:55 triggr systemd[1]: caddy.service: Failed with result 'exit-code'.
Oct 30 04:37:55 triggr systemd[1]: Failed to start Caddy.
Oct 30 05:40:19 triggr systemd[1]: caddy.service: Unit cannot be reloaded because it is inactive.
Oct 30 05:40:45 triggr systemd[1]: caddy.service: Unit cannot be reloaded because it is inactive.
Oct 30 05:40:51 triggr systemd[1]: caddy.service: Unit cannot be reloaded because it is inactive.
Oct 30 05:41:01 triggr systemd[1]: caddy.service: Unit cannot be reloaded because it is inactive.
Oct 30 05:47:48 triggr systemd[1]: caddy.service: Unit cannot be reloaded because it is inactive.
Oct 30 05:47:56 triggr systemd[1]: Starting Caddy...
Oct 30 05:47:56 triggr caddy[2320321]: caddy.HomeDir=/var/lib/caddy
Oct 30 05:47:56 triggr caddy[2320321]: caddy.AppDataDir=/var/lib/caddy/.local/share/caddy
Oct 30 05:47:56 triggr caddy[2320321]: caddy.AppConfigDir=/var/lib/caddy/.config/caddy
Oct 30 05:47:56 triggr caddy[2320321]: caddy.ConfigAutosavePath=/var/lib/caddy/.config/caddy/autosave.json
Oct 30 05:47:56 triggr caddy[2320321]: caddy.Version=v2.7.5 h1:HoysvZkLcN2xJExEepaFHK92Qgs7xAiCFydN5x5Hs6Q=
Oct 30 05:47:56 triggr caddy[2320321]: runtime.GOOS=linux
Oct 30 05:47:56 triggr caddy[2320321]: runtime.GOARCH=amd64
Oct 30 05:47:56 triggr caddy[2320321]: runtime.Compiler=gc
Oct 30 05:47:56 triggr caddy[2320321]: runtime.NumCPU=2
Oct 30 05:47:56 triggr caddy[2320321]: runtime.GOMAXPROCS=2
Oct 30 05:47:56 triggr caddy[2320321]: runtime.Version=go1.21.3
Oct 30 05:47:56 triggr caddy[2320321]: os.Getwd=/
Oct 30 05:47:56 triggr caddy[2320321]: LANG=C.UTF-8
Oct 30 05:47:56 triggr caddy[2320321]: PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
Oct 30 05:47:56 triggr caddy[2320321]: NOTIFY_SOCKET=/run/systemd/notify
Oct 30 05:47:56 triggr caddy[2320321]: HOME=/var/lib/caddy
Oct 30 05:47:56 triggr caddy[2320321]: LOGNAME=caddy
Oct 30 05:47:56 triggr caddy[2320321]: USER=caddy
Oct 30 05:47:56 triggr caddy[2320321]: INVOCATION_ID=102ab39979404bfc9bdd41337aa85501
Oct 30 05:47:56 triggr caddy[2320321]: JOURNAL_STREAM=8:13904326
Oct 30 05:47:56 triggr caddy[2320321]: SYSTEMD_EXEC_PID=2320321
Oct 30 05:47:56 triggr caddy[2320321]: {"level":"info","ts":1698644876.6241205,"msg":"using provided configuration","config_file":"/etc/caddy/Caddyfile","config_adapter":""}
Oct 30 05:47:56 triggr caddy[2320321]: Error: loading initial config: loading new config: starting caddy administration endpoint: listen tcp 127.0.0.1:2019: bind: address already in use
Oct 30 05:47:56 triggr systemd[1]: caddy.service: Main process exited, code=exited, status=1/FAILURE
Oct 30 05:47:56 triggr systemd[1]: caddy.service: Failed with result 'exit-code'.
Oct 30 05:47:56 triggr systemd[1]: Failed to start Caddy.
Oct 30 05:51:23 triggr systemd[1]: Starting Caddy...
Oct 30 05:51:23 triggr caddy[2321013]: caddy.HomeDir=/var/lib/caddy
Oct 30 05:51:23 triggr caddy[2321013]: caddy.AppDataDir=/var/lib/caddy/.local/share/caddy
Oct 30 05:51:23 triggr caddy[2321013]: caddy.AppConfigDir=/var/lib/caddy/.config/caddy
Oct 30 05:51:23 triggr caddy[2321013]: caddy.ConfigAutosavePath=/var/lib/caddy/.config/caddy/autosave.json
Oct 30 05:51:23 triggr caddy[2321013]: caddy.Version=v2.7.5 h1:HoysvZkLcN2xJExEepaFHK92Qgs7xAiCFydN5x5Hs6Q=
Oct 30 05:51:23 triggr caddy[2321013]: runtime.GOOS=linux
Oct 30 05:51:23 triggr caddy[2321013]: runtime.GOARCH=amd64
Oct 30 05:51:23 triggr caddy[2321013]: runtime.Compiler=gc
Oct 30 05:51:23 triggr caddy[2321013]: runtime.NumCPU=2
Oct 30 05:51:23 triggr caddy[2321013]: runtime.GOMAXPROCS=2
Oct 30 05:51:23 triggr caddy[2321013]: runtime.Version=go1.21.3
Oct 30 05:51:23 triggr caddy[2321013]: os.Getwd=/
Oct 30 05:51:23 triggr caddy[2321013]: LANG=C.UTF-8
Oct 30 05:51:23 triggr caddy[2321013]: PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
Oct 30 05:51:23 triggr caddy[2321013]: NOTIFY_SOCKET=/run/systemd/notify
Oct 30 05:51:23 triggr caddy[2321013]: HOME=/var/lib/caddy
Oct 30 05:51:23 triggr caddy[2321013]: LOGNAME=caddy
Oct 30 05:51:23 triggr caddy[2321013]: USER=caddy
Oct 30 05:51:23 triggr caddy[2321013]: INVOCATION_ID=735bc805ae7e4ba1af70eaba18f05af5
Oct 30 05:51:23 triggr caddy[2321013]: JOURNAL_STREAM=8:13911706
Oct 30 05:51:23 triggr caddy[2321013]: SYSTEMD_EXEC_PID=2321013
Oct 30 05:51:23 triggr caddy[2321013]: {"level":"info","ts":1698645083.0637424,"msg":"using provided configuration","config_file":"/etc/caddy/Caddyfile","config_adapter":""}
Oct 30 05:51:23 triggr caddy[2321013]: Error: loading initial config: loading new config: starting caddy administration endpoint: listen tcp 127.0.0.1:2019: bind: address already in use
Oct 30 05:51:23 triggr systemd[1]: caddy.service: Main process exited, code=exited, status=1/FAILURE
Oct 30 05:51:23 triggr systemd[1]: caddy.service: Failed with result 'exit-code'.
Oct 30 05:51:23 triggr systemd[1]: Failed to start Caddy.

This means that you probably already have Caddy running not as a service. Make sure to stop all Caddy instances first, then restart the service so that it’s the only one running.

Make sure you never run caddy start which will start Caddy in the background not as a service.

I did pgrep caddy

i got a list of PIDs and I killed them all

Next, i ran sudo systemctl start caddy

I did curl localhost I got the default caddy page as expected

Then i send the payload, i get this

Oct 30 09:28:36 triggr caddy[2328109]: {"level":"info","ts":1698658116.8171434,"msg":"using provided configuration","config_file":"/etc/caddy/Caddyfile","config_adapter":""}
Oct 30 09:28:36 triggr caddy[2328109]: {"level":"info","ts":1698658116.8223994,"logger":"admin","msg":"admin endpoint started","address":"localhost:2019","enforce_origin":false,"origins":["//localhost:2019","//[::1]:2019","//127.0.0.1:2019"]}
Oct 30 09:28:36 triggr caddy[2328109]: {"level":"info","ts":1698658116.82321,"logger":"tls.cache.maintenance","msg":"started background certificate maintenance","cache":"0xc0001f9b00"}
Oct 30 09:28:36 triggr caddy[2328109]: {"level":"warn","ts":1698658116.8235412,"logger":"http.auto_https","msg":"server is listening only on the HTTP port, so no automatic HTTPS will be applied to this server","server_name":"srv0","http_port":80}
Oct 30 09:28:36 triggr caddy[2328109]: {"level":"info","ts":1698658116.8239639,"logger":"tls","msg":"cleaning storage unit","description":"FileStorage:/var/lib/caddy/.local/share/caddy"}
Oct 30 09:28:36 triggr caddy[2328109]: {"level":"info","ts":1698658116.8245337,"logger":"http.log","msg":"server running","name":"srv0","protocols":["h1","h2","h3"]}
Oct 30 09:28:36 triggr caddy[2328109]: {"level":"info","ts":1698658116.8250024,"msg":"autosaved config (load with --resume flag)","file":"/var/lib/caddy/.config/caddy/autosave.json"}
Oct 30 09:28:36 triggr caddy[2328109]: {"level":"info","ts":1698658116.8253856,"msg":"serving initial configuration"}
Oct 30 09:28:36 triggr systemd[1]: Started Caddy.
Oct 30 09:28:36 triggr caddy[2328109]: {"level":"info","ts":1698658116.83951,"logger":"tls","msg":"finished cleaning storage units"}
Oct 30 09:42:36 triggr caddy[2328109]: {"level":"info","ts":1698658956.5435684,"logger":"admin.api","msg":"received request","method":"GET","host":"localhost:2019","uri":"/config/","remote_ip":"127.0.0.1","remote_port":"37660","headers":{"Accept-Encoding":["gzip"],"User-Agent":["Go-http-client/1.1"]}}
Oct 30 09:42:36 triggr caddy[2328109]: {"level":"info","ts":1698658956.546973,"logger":"admin.api","msg":"received request","method":"POST","host":"localhost:2019","uri":"/load","remote_ip":"127.0.0.1","remote_port":"37666","headers":{"Accept-Encoding":["gzip"],"Content-Length":["181"],"Content-Type":["application/json"],"User-Agent":["Go-http-client/1.1"]}}
Oct 30 09:42:36 triggr caddy[2328109]: {"level":"info","ts":1698658956.5487134,"logger":"admin","msg":"admin endpoint started","address":"localhost:2019","enforce_origin":false,"origins":["//localhost:2019","//[::1]:2019","//127.0.0.1:2019"]}
Oct 30 09:42:36 triggr caddy[2328109]: {"level":"warn","ts":1698658956.552627,"logger":"http.auto_https","msg":"server is listening only on the HTTP port, so no automatic HTTPS will be applied to this server","server_name":"srv0","http_port":80}
Oct 30 09:42:36 triggr caddy[2328109]: {"level":"info","ts":1698658956.5539277,"logger":"http.log","msg":"server running","name":"srv0","protocols":["h1","h2","h3"]}
Oct 30 09:42:36 triggr caddy[2328109]: {"level":"info","ts":1698658956.5540922,"logger":"http","msg":"servers shutting down with eternal grace period"}
Oct 30 09:42:36 triggr caddy[2328109]: {"level":"info","ts":1698658956.5544918,"msg":"autosaved config (load with --resume flag)","file":"/var/lib/caddy/.config/caddy/autosave.json"}
Oct 30 09:42:36 triggr caddy[2328109]: {"level":"info","ts":1698658956.554767,"logger":"admin.api","msg":"load complete"}
Oct 30 09:42:36 triggr caddy[2328109]: {"level":"info","ts":1698658956.5572927,"logger":"admin","msg":"stopped previous server","address":"localhost:2019"}

when i try to curl again, i get this

curl: (7) Failed to connect to localhost port 80 after 0 ms: Connection refused

What’s the current config at this point? Are you sure you configured Caddy with a server that listens on port 80?

this is my /etc/caddy/Caddyfile

:80 {
	# Set this path to your site's directory.
	root * /usr/share/caddy

	# Enable the static file server.
	file_server

	# Another common task is to set up a reverse proxy:
	# reverse_proxy localhost:8080

	# Or serve a PHP site through php-fpm:
	# php_fastcgi localhost:9000
}

this is caddy.json file

{
  "apps": {
    "http": {
      "servers": {
        "srv0": {
          "routes": [
            {
              "handle": [
                {
                  "handler": "reverse_proxy",
                  "upstreams": [
                    {
                      "dial": "http://localhost:3001"
                    }
                  ]
                }
              ],
              "match": [
                {
                  "host": [
                    "trig.iamobinna.com"
                  ]
                }
              ]
            }
          ]
        }
      }
    }
  }
}

I has take a look at the caddy JSON from the docs and redesign the struct,

this was my solution

  "apps": {
    "http": {
      "servers": {
        "srv0": {
          "listen": [
            ":80",
            ":443"
          ],
          "routes": [
            {
              "handle": [
                {
                  "handler": "reverse_proxy",
                  "upstreams": [
                    {
                      "dial": "localhost:3001"
                    }
                  ]
                }
              ],
              "match": [
                {
                  "host": [
                    "trig.iamobinna.com"
                  ]
                }
              ]
            }
          ]
        }
      }
    }
  }
}

I added listening ports to it, and I had to remove http:// from the upstream URL

I recommend not putting both :80 and :443 on the same server. It messes up Automatic HTTPS, because it won’t be possible for Caddy to automatically add the HTTP->HTTPS redirect routes for only the HTTP server.

If you intend to serve HTTPS primarily, remove :80 from your config, and Caddy will automatically add an :80 server for the redirects. If you actually want to allow HTTP requests to reach your app (not recommended) then make two servers with copies of the same routes.

OMG, you are right, this is the issue I am facing now, I have been reading the docs checking why it is not redirecting to HTTPS, thank you

this is the final solution

{
  "apps": {
    "http": {
      "servers": {
        "srv0": {
          "listen": [
            ":443"
          ],
          "routes": [
            {
              "match": [
                {
                  "host": [
                    "e.iamobinna.com"
                  ]
                }
              ],
              "handle": [
                {
                  "handler": "reverse_proxy",
                  "upstreams": [
                    {
                      "dial": "localhost:3001"
                    }
                  ]
                }
              ]
            }
          ]
        }
      }
    }
  }
}

this is my refactored go code

package server

import (
	"fmt"
	"net/http"
	"encoding/json"
	"bytes"
	"strings"

)

func CaddySetup(domain, target string) error {

	target = strings.TrimPrefix(target, "http://")

	config := CaddyConfig{}
	config.Apps.HTTP.Servers.Srv0.Listen = []string{":443"}
	config.Apps.HTTP.Servers.Srv0.Routes = []struct {
		Match []struct {
			Host []string `json:"host,omitempty"`
		} `json:"match,omitempty"`
		Handle []struct {
			Handler  string `json:"handler"`
			Upstreams []struct {
				Dial string `json:"dial,omitempty"`
			} `json:"upstreams,omitempty"`
		} `json:"handle,omitempty"`
	}{
		{
			Match: []struct {
				Host []string `json:"host,omitempty"`

			}{
				{
					Host: []string{domain},
				},
			},
			Handle: []struct {
				Handler  string `json:"handler"`
				Upstreams []struct {
					Dial string `json:"dial,omitempty"`
				} `json:"upstreams,omitempty"`
			}{
				{
					Handler: "reverse_proxy",
					Upstreams: []struct {
						Dial string `json:"dial,omitempty"`
					}{
						{
							Dial: target,
						},
					},
				},
			},
		},
	}


	// Convert the configuration to JSON
	jsonData, err := json.Marshal(config)
	if err != nil {
		return fmt.Errorf("Failed to convert configuration to JSON: %v", err)
	}

	// Print the JSON to the console
	fmt.Println(string(jsonData))

	// Make a POST request to the Caddy API
	resp, err := http.Post("http://localhost:2019/load", "application/json", bytes.NewBuffer(jsonData))
	if err != nil {
		return fmt.Errorf("Failed to make request to Caddy API: %v", err)
	}
	defer resp.Body.Close()

	if resp.StatusCode != http.StatusOK {

		return fmt.Errorf("Caddy API returned non-200 status code: %d", resp.StatusCode)
	}

	return nil
}
2 Likes

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.