df94ed3cd4
- GatewayBridgeController: MCP-artiger Kommando-Adapter für Agent-zu-Backend - TaskBridgeService + LiveUpdateService: SSE Live-Sync + Bridge-Kommandos - FlowBoard.vue: Board-first orchestration dashboard panel - live-sync.ts store + live.ts service: SSE-basierte Live-Updates - Nullability-Warnung in HealthController.cs gefixt - nginx.conf: SSE-Proxy + CORS für Bridge-Endpunkte - .gitignore: pnpm/corepack local caches ausgeschlossen - docs: architecture-board-first-orchestration.md hinzugefügt - README: Backend Bridge API dokumentiert
82 lines
2.6 KiB
Plaintext
82 lines
2.6 KiB
Plaintext
# /etc/nginx/sites-available/nexus.noveria.net
|
|
# Symlink: ln -s /etc/nginx/sites-available/nexus.noveria.net /etc/nginx/sites-enabled/
|
|
|
|
server {
|
|
listen 80;
|
|
server_name nexus.noveria.net;
|
|
|
|
# Let's Encrypt challenge
|
|
location /.well-known/acme-challenge/ {
|
|
root /var/www/html;
|
|
}
|
|
|
|
location / {
|
|
return 301 https://$host$request_uri;
|
|
}
|
|
}
|
|
|
|
server {
|
|
listen 443 ssl http2;
|
|
server_name nexus.noveria.net;
|
|
|
|
# SSL wird per certbot automatisch befüllt
|
|
ssl_certificate /etc/letsencrypt/live/nexus.noveria.net/fullchain.pem;
|
|
ssl_certificate_key /etc/letsencrypt/live/nexus.noveria.net/privkey.pem;
|
|
|
|
# Security-Header
|
|
add_header Strict-Transport-Security "max-age=63072000" always;
|
|
add_header X-Content-Type-Options nosniff;
|
|
add_header X-Frame-Options DENY;
|
|
|
|
client_max_body_size 16m;
|
|
|
|
# Bridge-Endpunkte: Gateway-zu-Backend-Agent-Pfad
|
|
# X-Agent-Id wird durchgereicht für Agent-Identität
|
|
location /api/bridge/ {
|
|
proxy_pass http://127.0.0.1:18880;
|
|
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_set_header X-Agent-Id $http_x_agent_id;
|
|
proxy_buffering off;
|
|
proxy_read_timeout 120s;
|
|
}
|
|
|
|
# Dashboard SSE stream: single dedicated non-buffered block.
|
|
location = /api/dashboard/live {
|
|
proxy_pass http://127.0.0.1:18880;
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Connection "";
|
|
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_buffering off;
|
|
proxy_cache off;
|
|
proxy_read_timeout 1h;
|
|
proxy_send_timeout 1h;
|
|
add_header Cache-Control "no-cache, no-store, must-revalidate" always;
|
|
add_header X-Accel-Buffering no always;
|
|
}
|
|
|
|
location / {
|
|
proxy_pass http://127.0.0.1:18880;
|
|
proxy_http_version 1.1;
|
|
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;
|
|
}
|
|
|
|
# API-Direktzugriff falls nötig
|
|
location /api/ {
|
|
proxy_pass http://127.0.0.1:18880;
|
|
proxy_http_version 1.1;
|
|
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;
|
|
}
|
|
}
|