feat: add public-facing web interface with domain-based routing
Add public-web service with static landing page for client enrollment and device provisioning. Add public-web container to docker-compose with port 8082. Configure nginx reverse proxy with domain-based routing: admin-vpn.nesterovic.cc for admin interface and vpn.nesterovic.cc for public interface. Add proxy headers for X-Real-IP, X-Forwarded-For and X-Forwarded-Proto to both server blocks. Create public-web Dockerfile with nginx serving
This commit is contained in:
35
public-web/index.html
Normal file
35
public-web/index.html
Normal file
@@ -0,0 +1,35 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>NexaVPN</title>
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
<link rel="stylesheet" href="/styles.css" />
|
||||
</head>
|
||||
<body>
|
||||
<main class="shell">
|
||||
<section class="hero">
|
||||
<img class="logo" src="/NexaVPN_Logo.png" alt="NexaVPN" />
|
||||
<p class="eyebrow">Private access</p>
|
||||
<h1>Connect with the NexaVPN app.</h1>
|
||||
<p class="copy">
|
||||
Use the desktop client to sign in, provision this device, and connect to your private network.
|
||||
</p>
|
||||
<div class="actions">
|
||||
<a class="button primary" href="https://admin-vpn.nesterovic.cc">Admin portal</a>
|
||||
<a class="button secondary" href="/api/v1/healthz">API health</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="card">
|
||||
<h2>What this host is for</h2>
|
||||
<ul>
|
||||
<li>Desktop client login and device enrollment</li>
|
||||
<li>Profile sync for provisioned devices</li>
|
||||
<li>Public VPN entrypoint information</li>
|
||||
</ul>
|
||||
</section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user