166 lines
4.9 KiB
Plaintext
166 lines
4.9 KiB
Plaintext
# Nginx Configuration for Plunk - Subdomain-based Routing
|
|
# This configuration routes traffic based on subdomains:
|
|
# - api.example.com -> API server (port 8080)
|
|
# - app.example.com -> Web dashboard (port 3000)
|
|
# - www.example.com -> Landing page (port 4000)
|
|
# - docs.example.com -> Documentation (port 1000)
|
|
|
|
# Upstream definitions
|
|
upstream plunk_api {
|
|
server 127.0.0.1:8080;
|
|
}
|
|
|
|
upstream plunk_web {
|
|
server 127.0.0.1:3000;
|
|
}
|
|
|
|
upstream plunk_landing {
|
|
server 127.0.0.1:4000;
|
|
}
|
|
|
|
upstream plunk_wiki {
|
|
server 127.0.0.1:1000;
|
|
}
|
|
|
|
upstream plunk_acme_challenge {
|
|
server 127.0.0.1:8888;
|
|
}
|
|
|
|
# API Server (also serves as default_server for unmatched domains)
|
|
server {
|
|
listen ${NGINX_PORT} default_server;
|
|
server_name ${API_DOMAIN};
|
|
|
|
client_max_body_size 10M;
|
|
|
|
# ACME challenges should be handled by SMTP server, not API
|
|
# This catches ALL ACME challenges, including for SMTP_DOMAIN
|
|
location /.well-known/acme-challenge/ {
|
|
proxy_pass http://plunk_acme_challenge;
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
}
|
|
|
|
location / {
|
|
proxy_pass http://plunk_api;
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
proxy_set_header Connection 'upgrade';
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
proxy_cache_bypass $http_upgrade;
|
|
}
|
|
}
|
|
|
|
# Web Dashboard
|
|
server {
|
|
listen ${NGINX_PORT};
|
|
server_name ${DASHBOARD_DOMAIN};
|
|
|
|
client_max_body_size 10M;
|
|
|
|
# ACME challenges fallback
|
|
location /.well-known/acme-challenge/ {
|
|
proxy_pass http://plunk_acme_challenge;
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
}
|
|
|
|
location / {
|
|
proxy_pass http://plunk_web;
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
proxy_set_header Connection 'upgrade';
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
proxy_cache_bypass $http_upgrade;
|
|
}
|
|
}
|
|
|
|
# Landing Page
|
|
server {
|
|
listen ${NGINX_PORT};
|
|
server_name ${LANDING_DOMAIN};
|
|
|
|
client_max_body_size 10M;
|
|
|
|
# ACME challenges fallback
|
|
location /.well-known/acme-challenge/ {
|
|
proxy_pass http://plunk_acme_challenge;
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
}
|
|
|
|
location / {
|
|
proxy_pass http://plunk_landing;
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
proxy_set_header Connection 'upgrade';
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
proxy_cache_bypass $http_upgrade;
|
|
}
|
|
}
|
|
|
|
# Documentation (optional)
|
|
server {
|
|
listen ${NGINX_PORT};
|
|
server_name ${WIKI_DOMAIN};
|
|
|
|
client_max_body_size 10M;
|
|
|
|
# ACME challenges fallback
|
|
location /.well-known/acme-challenge/ {
|
|
proxy_pass http://plunk_acme_challenge;
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
}
|
|
|
|
location / {
|
|
proxy_pass http://plunk_wiki;
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
proxy_set_header Connection 'upgrade';
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
proxy_cache_bypass $http_upgrade;
|
|
}
|
|
}
|
|
|
|
# ACME Challenge Proxy (for SMTP domain certificate generation)
|
|
# This proxies Let's Encrypt ACME HTTP-01 challenges to the SMTP server's challenge handler
|
|
server {
|
|
listen ${NGINX_PORT};
|
|
server_name ${SMTP_DOMAIN};
|
|
|
|
# Proxy ACME challenges to SMTP server's internal challenge server
|
|
location /.well-known/acme-challenge/ {
|
|
proxy_pass http://plunk_acme_challenge;
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
}
|
|
|
|
# Deny all other requests to SMTP domain
|
|
location / {
|
|
return 404;
|
|
}
|
|
}
|