diff --git a/app/app.py b/app/app.py index d8cc399..66dee70 100644 --- a/app/app.py +++ b/app/app.py @@ -108,6 +108,9 @@ def generate_nginx_config(config): location_block = _proxy_location_block(target_scheme, upstream_name) + http_redirect = target.get("http_redirect", False) + http_port = target.get("http_port", 0) + # Domain-based routing if domains: for domain_entry in domains: @@ -130,6 +133,15 @@ def generate_nginx_config(config): lines.append("}") lines.append("") + # HTTP -> HTTPS redirect for this domain + if http_redirect and http_port: + lines.append("server {") + lines.append(f" listen {http_port};") + lines.append(f" server_name {domain};") + lines.append(f" return 301 https://$host:{domain_port}$request_uri;") + lines.append("}") + lines.append("") + # IP/Port-based routing if listen_port: lines.append("server {") @@ -147,6 +159,15 @@ def generate_nginx_config(config): lines.append("}") lines.append("") + # HTTP -> HTTPS redirect for this port + if http_redirect and http_port: + lines.append("server {") + lines.append(f" listen {http_port};") + lines.append(f" server_name _;") + lines.append(f" return 301 https://$host:{listen_port}$request_uri;") + lines.append("}") + lines.append("") + conf_content = "\n".join(lines) os.makedirs(NGINX_CONF_DIR, exist_ok=True) with open(NGINX_UPSTREAM_CONF, "w") as f: @@ -273,6 +294,8 @@ def add_target(): "target_port": int(request.form.get("target_port", 80)), "target_scheme": request.form.get("target_scheme", "http"), "listen_port": int(request.form.get("listen_port", 0) or 0), + "http_redirect": request.form.get("http_redirect") == "on", + "http_port": int(request.form.get("http_port", 0) or 0), "domains": domains, "enabled": True, } @@ -330,6 +353,8 @@ def edit_target(idx): "target_port": int(request.form.get("target_port", 80)), "target_scheme": request.form.get("target_scheme", "http"), "listen_port": int(request.form.get("listen_port", 0) or 0), + "http_redirect": request.form.get("http_redirect") == "on", + "http_port": int(request.form.get("http_port", 0) or 0), "domains": domains, "enabled": config["targets"][idx].get("enabled", True), } diff --git a/app/templates/index.html b/app/templates/index.html index 4476f89..36602f0 100644 --- a/app/templates/index.html +++ b/app/templates/index.html @@ -237,6 +237,16 @@ +