| { |
| "apps": { |
| "http": { |
| "servers": { |
| "srv0": { |
| "listen": [":443"], |
| "routes": [ |
| { |
| "match": [ |
| { |
| "host": ["signup.hopescaramels.com"] |
| } |
| ], |
| "handle": [ |
| { |
| "handler": "subroute", |
| "routes": [ |
| { |
| "handle": [ |
| { |
| "handler": "reverse_proxy", |
| "upstreams": [ |
| { |
| "dial": "192.168.0.4:3035" |
| } |
| ] |
| } |
| ] |
| } |
| ] |
| } |
| ], |
| "terminal": true |
| }, |
| { |
| "match": [ |
| { |
| "host": ["homebridge.coded.codes"] |
| } |
| ], |
| "handle": [ |
| { |
| "handler": "subroute", |
| "routes": [ |
| { |
| "handle": [ |
| { |
| "handler": "reverse_proxy", |
| "upstreams": [ |
| { |
| "dial": "localhost:8581" |
| } |
| ] |
| } |
| ] |
| } |
| ] |
| } |
| ], |
| "terminal": true |
| }, |
| { |
| "match": [ |
| { |
| "host": [ |
| "mail.coded.codes", |
| "mail.clicks.codes", |
| "mail.hopescaramels.com" |
| ] |
| } |
| ], |
| "handle": [ |
| { |
| "handler": "subroute", |
| "routes": [ |
| { |
| "handle": [ |
| { |
| "handler": "reverse_proxy", |
| "transport": { |
| "protocol": "http" |
| }, |
| "upstreams": [ |
| { |
| "dial": "localhost:1080" |
| } |
| ] |
| } |
| ] |
| } |
| ] |
| } |
| ], |
| "terminal": true |
| }, |
| { |
| "match": [ |
| { |
| "host": ["etherpad.clicks.codes"] |
| } |
| ], |
| "handle": [ |
| { |
| "handler": "subroute", |
| "routes": [ |
| { |
| "handle": [ |
| { |
| "handler": "reverse_proxy", |
| "upstreams": [ |
| { |
| "dial": "127.0.0.1:9001" |
| } |
| ] |
| } |
| ] |
| } |
| ] |
| } |
| ], |
| "terminal": true |
| }, |
| { |
| "match": [ |
| { |
| "host": ["www.hopescaramels.com"] |
| } |
| ], |
| "handle": [ |
| { |
| "handler": "subroute", |
| "routes": [ |
| { |
| "handle": [ |
| { |
| "handler": "static_response", |
| "headers": { |
| "Location": ["https://etsy.com/shop/HopesCaramels"] |
| }, |
| "status_code": 302 |
| } |
| ] |
| } |
| ] |
| } |
| ], |
| "terminal": true |
| }, |
| { |
| "match": [ |
| { |
| "host": ["jellyfin.coded.codes"] |
| } |
| ], |
| "handle": [ |
| { |
| "handler": "subroute", |
| "routes": [ |
| { |
| "handle": [ |
| { |
| "handler": "reverse_proxy", |
| "upstreams": [ |
| { |
| "dial": "localhost:8096" |
| } |
| ] |
| } |
| ] |
| } |
| ] |
| } |
| ], |
| "terminal": true |
| }, |
| { |
| "match": [ |
| { |
| "host": ["codedpc.coded.codes"] |
| } |
| ], |
| "handle": [ |
| { |
| "handler": "subroute", |
| "routes": [ |
| { |
| "handle": [ |
| { |
| "handler": "reverse_proxy", |
| "upstreams": [ |
| { |
| "dial": "192.168.0.2:3389" |
| } |
| ] |
| } |
| ] |
| } |
| ] |
| } |
| ], |
| "terminal": true |
| }, |
| { |
| "match": [ |
| { |
| "host": ["testing.coded.codes"] |
| } |
| ], |
| "handle": [ |
| { |
| "handler": "subroute", |
| "routes": [ |
| { |
| "handle": [ |
| { |
| "handler": "reverse_proxy", |
| "upstreams": [ |
| { |
| "dial": "192.168.0.2:3030" |
| } |
| ] |
| } |
| ] |
| } |
| ] |
| } |
| ], |
| "terminal": true |
| }, |
| { |
| "match": [ |
| { |
| "host": ["kavita.coded.codes"] |
| } |
| ], |
| "handle": [ |
| { |
| "handler": "subroute", |
| "routes": [ |
| { |
| "handle": [ |
| { |
| "handler": "reverse_proxy", |
| "upstreams": [ |
| { |
| "dial": "localhost:5000" |
| } |
| ] |
| } |
| ] |
| } |
| ] |
| } |
| ], |
| "terminal": true |
| }, |
| { |
| "match": [ |
| { |
| "host": ["hopescaramels.com"] |
| } |
| ], |
| "handle": [ |
| { |
| "handler": "subroute", |
| "routes": [ |
| { |
| "handle": [ |
| { |
| "handler": "static_response", |
| "headers": { |
| "Location": ["https://etsy.com/shop/HopesCaramels"] |
| }, |
| "status_code": 302 |
| } |
| ] |
| } |
| ] |
| } |
| ], |
| "terminal": true |
| }, |
| { |
| "match": [ |
| { |
| "host": ["api.clicks.codes"] |
| } |
| ], |
| "handle": [ |
| { |
| "handler": "subroute", |
| "routes": [ |
| { |
| "handle": [ |
| { |
| "handler": "subroute", |
| "routes": [ |
| { |
| "handle": [ |
| { |
| "handler": "rewrite", |
| "strip_path_prefix": "/nucleus" |
| } |
| ] |
| }, |
| { |
| "handle": [ |
| { |
| "handler": "reverse_proxy", |
| "upstreams": [ |
| { |
| "dial": "127.0.0.1:10000" |
| } |
| ] |
| } |
| ] |
| } |
| ] |
| } |
| ], |
| "match": [ |
| { |
| "path": ["/nucleus/*"] |
| } |
| ] |
| }, |
| { |
| "handle": [ |
| { |
| "handler": "static_response", |
| "status_code": 503 |
| } |
| ] |
| } |
| ] |
| } |
| ], |
| "terminal": true |
| }, |
| { |
| "match": [ |
| { |
| "host": ["omv.coded.codes"] |
| } |
| ], |
| "handle": [ |
| { |
| "handler": "subroute", |
| "routes": [ |
| { |
| "handle": [ |
| { |
| "handler": "reverse_proxy", |
| "upstreams": [ |
| { |
| "dial": "localhost:6773" |
| } |
| ] |
| } |
| ] |
| } |
| ] |
| } |
| ], |
| "terminal": true |
| }, |
| { |
| "match": [ |
| { |
| "host": ["api.coded.codes"] |
| } |
| ], |
| "handle": [ |
| { |
| "handler": "subroute", |
| "routes": [ |
| { |
| "handle": [ |
| { |
| "handler": "subroute", |
| "routes": [ |
| { |
| "handle": [ |
| { |
| "handler": "rewrite", |
| "strip_path_prefix": "/nucleus" |
| } |
| ] |
| }, |
| { |
| "handle": [ |
| { |
| "handler": "reverse_proxy", |
| "upstreams": [ |
| { |
| "dial": "192.168.0.2:10000" |
| } |
| ] |
| } |
| ] |
| } |
| ] |
| } |
| ], |
| "match": [ |
| { |
| "path": ["/nucleus/*"] |
| } |
| ] |
| }, |
| { |
| "handle": [ |
| { |
| "handler": "static_response", |
| "status_code": 404 |
| } |
| ] |
| } |
| ] |
| } |
| ], |
| "terminal": true |
| }, |
| { |
| "match": [ |
| { |
| "host": ["www.clicks.codes"] |
| } |
| ], |
| "handle": [ |
| { |
| "handler": "subroute", |
| "routes": [ |
| { |
| "handle": [ |
| { |
| "handler": "static_response", |
| "headers": { |
| "Location": [ |
| "https://clicks.codes{http.request.uri}" |
| ] |
| }, |
| "status_code": 302 |
| } |
| ] |
| } |
| ] |
| } |
| ], |
| "terminal": true |
| }, |
| { |
| "match": [ |
| { |
| "host": ["clicks.codes"] |
| } |
| ], |
| "handle": [ |
| { |
| "handler": "subroute", |
| "routes": [ |
| { |
| "handle": [ |
| { |
| "handler": "reverse_proxy", |
| "upstreams": [ |
| { |
| "dial": "127.0.0.1:3000" |
| } |
| ] |
| } |
| ] |
| } |
| ] |
| } |
| ], |
| "terminal": true |
| }, |
| { |
| "match": [ |
| { |
| "host": ["coded.codes"] |
| } |
| ], |
| "handle": [ |
| { |
| "handler": "subroute", |
| "routes": [ |
| { |
| "handle": [ |
| { |
| "handler": "static_response", |
| "headers": { |
| "Location": [ |
| "https://clicks.codes{http.request.uri}" |
| ] |
| }, |
| "status_code": 302 |
| } |
| ] |
| } |
| ] |
| } |
| ], |
| "terminal": true |
| } |
| ] |
| }, |
| "srv1": { |
| "listen": [":80"], |
| "routes": [ |
| { |
| "match": [ |
| { |
| "host": [ |
| "mail.clicks.codes", |
| "mail.coded.codes", |
| "mail.hopescaramels.com", |
| "autoconfig.coded.codes", |
| "autoconfig.clicks.codes", |
| "autoconfig.hopescaramels.com", |
| |
| "imap.coded.codes", |
| "imap.clicks.codes", |
| "imap.hopescaramels.com", |
| "pop.coded.codes", |
| "pop.clicks.codes", |
| "pop.hopescaramels.com", |
| "smtp.coded.codes", |
| "smtp.clicks.codes", |
| "smtp.hopescaramels.com" |
| ] |
| } |
| ], |
| "handle": [ |
| { |
| "handler": "subroute", |
| "routes": [ |
| { |
| "handle": [ |
| { |
| "handler": "reverse_proxy", |
| "upstreams": [ |
| { |
| "dial": "localhost:1080" |
| } |
| ] |
| } |
| ] |
| } |
| ] |
| } |
| ], |
| "terminal": true |
| } |
| ] |
| } |
| } |
| }, |
| "layer4": { |
| "servers": { |
| "smtp-25": { |
| "listen": ["0.0.0.0:25"], |
| "routes": [ |
| { |
| "handle": [ |
| { |
| "handler": "proxy", |
| "proxy_protocol": "v2", |
| "upstreams": [{ "dial": ["127.0.0.1:1025"] }] |
| } |
| ] |
| } |
| ] |
| }, |
| "smtp-465": { |
| "listen": ["0.0.0.0:465"], |
| "routes": [ |
| { |
| "handle": [ |
| { |
| "handler": "proxy", |
| "proxy_protocol": "v2", |
| "upstreams": [{ "dial": ["127.0.0.1:1465"] }] |
| } |
| ] |
| } |
| ] |
| }, |
| "smtp-587": { |
| "listen": ["0.0.0.0:587"], |
| "routes": [ |
| { |
| "handle": [ |
| { |
| "handler": "proxy", |
| "proxy_protocol": "v2", |
| "upstreams": [{ "dial": ["127.0.0.1:1587"] }] |
| } |
| ] |
| } |
| ] |
| }, |
| "pop-110": { |
| "listen": ["0.0.0.0:110"], |
| "routes": [ |
| { |
| "handle": [ |
| { |
| "handler": "proxy", |
| "proxy_protocol": "v2", |
| "upstreams": [{ "dial": ["127.0.0.1:1110"] }] |
| } |
| ] |
| } |
| ] |
| }, |
| "pop-995": { |
| "listen": ["0.0.0.0:995"], |
| "routes": [ |
| { |
| "handle": [ |
| { |
| "handler": "proxy", |
| "proxy_protocol": "v2", |
| "upstreams": [{ "dial": ["127.0.0.1:1995"] }] |
| } |
| ] |
| } |
| ] |
| }, |
| "imap-143": { |
| "listen": ["0.0.0.0:143"], |
| "routes": [ |
| { |
| "handle": [ |
| { |
| "handler": "proxy", |
| "proxy_protocol": "v2", |
| "upstreams": [{ "dial": ["127.0.0.1:1143"] }] |
| } |
| ] |
| } |
| ] |
| }, |
| "imap-993": { |
| "listen": ["0.0.0.0:993"], |
| "routes": [ |
| { |
| "handle": [ |
| { |
| "handler": "proxy", |
| "proxy_protocol": "v2", |
| "upstreams": [{ "dial": ["127.0.0.1:1993"] }] |
| } |
| ] |
| } |
| ] |
| } |
| } |
| } |
| } |
| } |