|
|
@@ -0,0 +1,32 @@
|
|
|
+## Context
|
|
|
+
|
|
|
+The trojan-go config template at `roles/trojan/templates/trojan-config.json.j2` sets `remote_port: {{ trojan_fallback_port }}` (default 8080). This is the port trojan-go forwards non-authenticated HTTPS traffic to for camouflage. Currently nothing listens on this port, so trojan-go fails to operate correctly.
|
|
|
+
|
|
|
+## Goals / Non-Goals
|
|
|
+
|
|
|
+**Goals:**
|
|
|
+- Provide a working HTTP fallback on port 8080 for trojan-go camouflage
|
|
|
+- Keep the nginx setup minimal — a generic static page, no reverse proxy logic
|
|
|
+
|
|
|
+**Non-Goals:**
|
|
|
+- Full nginx reverse proxy or multi-site configuration
|
|
|
+- Serving the actual Let's Encrypt TLS site on this port (trojan-go handles TLS on 443)
|
|
|
+
|
|
|
+## Decisions
|
|
|
+
|
|
|
+**Add nginx tasks inside the trojan role rather than a separate role**
|
|
|
+
|
|
|
+The nginx fallback is tightly coupled to the trojan deployment — it exists solely as camouflage for trojan-go. Adding tasks to the existing trojan role keeps the relationship clear and avoids an extra role.
|
|
|
+
|
|
|
+**Use a simple inline nginx config, not a full vhost template directory**
|
|
|
+
|
|
|
+The fallback only needs a minimal server block: listen on `trojan_fallback_port`, serve a generic static HTML page. A single `nginx-fallback.conf.j2` template deployed to `/etc/nginx/conf.d/` is sufficient.
|
|
|
+
|
|
|
+**Allow the fallback port through UFW**
|
|
|
+
|
|
|
+The base role handles firewall rules. The landing role already opens port 80 via `allowed_ports`. Add `trojan_fallback_port` to the landing `allowed_ports` list so nginx is reachable.
|
|
|
+
|
|
|
+## Risks / Trade-offs
|
|
|
+
|
|
|
+- [nginx not installed] → Installing nginx adds a dependency; ensure the task installs it before deploying the config
|
|
|
+- [port conflict] → `trojan_fallback_port` is hardcoded as 8080 in defaults; if another service uses this port, nginx will fail to start
|