configure-nginx
О программе
Этот навык настраивает Nginx в качестве рабочего веб-сервера и обратного прокси. Он обеспечивает обслуживание статических файлов, завершение SSL/TLS с помощью Let's Encrypt, балансировку нагрузки и проксирование к серверным службам, таким как Node.js или Python. Используйте его для добавления ограничения частоты запросов, настроек заголовков безопасности и усиления защиты конечных точек.
Быстрая установка
Claude Code
Рекомендуетсяnpx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/configure-nginxСкопируйте и вставьте эту команду в Claude Code для установки этого навыка
Документация
name: configure-nginx description: > Konfiguriere Nginx als Webserver und Reverse Proxy. Umfasst statische Dateiauslieferung, Reverse Proxy zu Upstream-Diensten, SSL/TLS-Terminierung mit Let's Encrypt, Location-Bloecke, Lastverteilung, Rate Limiting und Sicherheitsheader. Verwende diesen Skill beim Ausliefern statischer Dateien in Produktion, beim Reverse-Proxying zu Backend-Diensten (Node.js, Python, R/Shiny), bei SSL/TLS-Terminierung, bei Lastverteilung ueber Instanzen oder beim Hinzufuegen von Rate Limiting und Sicherheitsheadern zur Haertung eines Endpunkts. license: MIT allowed-tools: Read Write Edit Bash Grep Glob metadata: author: Philipp Thoss version: "1.0" domain: containerization complexity: intermediate language: multi tags: nginx, reverse-proxy, ssl, tls, lets-encrypt, web-server, security-headers locale: de source_locale: en source_commit: 6f65f316 translator: claude-sonnet-4-6 translation_date: 2026-03-16
Nginx konfigurieren
Nginx als Webserver und Reverse Proxy mit SSL-Terminierung und Sicherheitshaertung einrichten.
Wann verwenden
- Statische Dateien (HTML, CSS, JS) in Produktion ausliefern
- Reverse Proxying zu Backend-Diensten (Node.js, Python, Go, R/Shiny)
- SSL/TLS mit Let's-Encrypt-Zertifikaten terminieren
- Lastverteilung ueber mehrere Backend-Instanzen
- Rate Limiting und Sicherheitsheader hinzufuegen
Eingaben
- Erforderlich: Deployment-Ziel (Docker-Container oder Bare Metal)
- Erforderlich: Backend-Dienst(e) zum Proxying (Host:Port)
- Optional: Domainname fuer SSL
- Optional: Verzeichnis fuer statische Dateien
Vorgehensweise
Schritt 1: Einfacher Reverse Proxy
nginx.conf:
events {
worker_connections 1024;
}
http {
upstream app {
server app:3000;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://app;
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;
}
}
}
Docker-Compose-Dienst:
services:
nginx:
image: nginx:1.27-alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- app
Erwartet: Anfragen an Port 80 werden an den App-Dienst weitergeleitet.
Schritt 2: Statische Dateiauslieferung
server {
listen 80;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
location /assets/ {
expires 1y;
add_header Cache-Control "public, immutable";
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2?)$ {
expires 6M;
add_header Cache-Control "public";
}
}
Schritt 3: SSL/TLS mit Let's Encrypt
Mit certbot und der Webroot-Methode:
server {
listen 80;
server_name example.com;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://app;
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;
}
}
Docker Compose mit certbot:
services:
nginx:
image: nginx:1.27-alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- certbot-webroot:/var/www/certbot:ro
- certbot-certs:/etc/letsencrypt:ro
certbot:
image: certbot/certbot
volumes:
- certbot-webroot:/var/www/certbot
- certbot-certs:/etc/letsencrypt
volumes:
certbot-webroot:
certbot-certs:
Erstes Zertifikat:
docker compose run --rm certbot certonly \
--webroot -w /var/www/certbot \
-d example.com --email [email protected] --agree-tos
Erwartet: HTTPS funktioniert mit gueltigem Let's-Encrypt-Zertifikat.
Bei Fehler: DNS-Eintrag pruefen, ob er auf den Server zeigt. Sicherstellen, dass Port 80 fuer ACME-Challenges offen ist.
Schritt 4: Sicherheitsheader
server {
# ... SSL-Konfiguration oben ...
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline';" always;
# Nginx-Version verbergen
server_tokens off;
}
Schritt 5: Rate Limiting
http {
# Rate-Limit-Zonen definieren
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
limit_req_zone $binary_remote_addr zone=login:10m rate=1r/s;
server {
location /api/ {
limit_req zone=api burst=20 nodelay;
proxy_pass http://app;
}
location /login {
limit_req zone=login burst=5;
proxy_pass http://app;
}
}
}
Schritt 6: Lastverteilung
upstream app {
least_conn;
server app1:3000;
server app2:3000;
server app3:3000 backup;
}
| Methode | Direktive | Verhalten |
|---|---|---|
| Round Robin | (Standard) | Gleichmaessige Verteilung |
| Wenigste Verbindungen | least_conn | Leitet an am wenigsten ausgelasteten weiter |
| IP-Hash | ip_hash | Sticky Sessions |
| Gewichtet | server app:3000 weight=3 | Proportional |
Schritt 7: Konfiguration testen
# Konfigurationssyntax testen
docker compose exec nginx nginx -t
# Ohne Ausfallzeit neu laden
docker compose exec nginx nginx -s reload
# Antwortheader pruefen
curl -I https://example.com
Erwartet: nginx -t meldet Syntax OK. Header enthalten Sicherheitsheader.
Validierung
-
nginx -tmeldet gueltige Konfiguration - HTTP leitet auf HTTPS um (falls SSL aktiviert)
- Backend-Dienst ist ueber den Proxy erreichbar
- Sicherheitsheader in der Antwort vorhanden
- Rate Limiting greift bei ueberschuessigen Anfragen
- SSL-Labs-Test ergibt A+-Bewertung (falls oeffentlich)
Haeufige Fehler
- Fehlender
proxy_set_header Host: Backend erhaelt falschen Host-Header, was virtuelle Hosts und Weiterleitungen bricht. location-Reihenfolge ist wichtig: Nginx verwendet den spezifischsten Treffer. Exakt (=) > Praefix (^~) > Regex (~) > allgemeiner Praefix.- SSL-Zertifikatserneuerung: Cron oder Timer fuer
certbot reneweinrichten und Nginx neu laden. - Grosse Request-Bodies: Standard
client_max_body_sizeist 1MB. Fuer Datei-Uploads erhoehen:client_max_body_size 50m;. - WebSocket-Proxying: Erfordert zusaetzliche Header. Siehe
configure-reverse-proxyfuer das Muster.
Verwandte Skills
configure-reverse-proxy- Multi-Tool-Proxy-Muster einschliesslich WebSocket und Traefiksetup-compose-stack- Compose-Stack mit Nginxdeploy-searxng- Verwendet Nginx als Frontend fuer SearXNGconfigure-ingress-networking- Kubernetes Ingress (NGINX Ingress Controller)
GitHub репозиторий
Похожие навыки
content-collections
МетаЭтот навык предоставляет проверенную в продакшене настройку для Content Collections — TypeScript-ориентированного инструмента, который преобразует файлы Markdown/MDX в типобезопасные коллекции данных с валидацией Zod. Используйте его при создании блогов, сайтов документации или контентных приложений на Vite + React для обеспечения типобезопасности и автоматической проверки содержимого. Он охватывает всё: от настройки плагина Vite и компиляции MDX до оптимизации развертывания и валидации схем.
polymarket
МетаЭтот навык позволяет разработчикам создавать приложения на платформе прогнозных рынков Polymarket, включая интеграцию с API для торговли и получения рыночных данных. Он также обеспечивает потоковую передачу данных в реальном времени через WebSocket для отслеживания текущих сделок и рыночной активности. Используйте его для реализации торговых стратегий или создания инструментов, обрабатывающих обновления рынка в реальном времени.
creating-opencode-plugins
МетаЭтот навык помогает разработчикам создавать плагины OpenCode, которые подключаются к более чем 25 типам событий, таким как команды, файлы и операции LSP. Он предоставляет структуру плагина, спецификации API событий и шаблоны реализации для модулей на JavaScript/TypeScript. Используйте его, когда вам нужно перехватывать, отслеживать или расширять жизненный цикл ассистента OpenCode AI с помощью пользовательской событийно-ориентированной логики.
sglang
МетаSGLang — это высокопроизводительный фреймворк для обслуживания больших языковых моделей (LLM), специализирующийся на быстрой структурированной генерации JSON, regex и рабочих процессов агентов с использованием кэширования префиксов RadixAttention. Он обеспечивает значительно более высокую скорость вывода, особенно для задач с повторяющимися префиксами, что делает его идеальным для сложных структурированных результатов и многократных диалогов. Выбирайте SGLang вместо альтернатив, таких как vLLM, когда вам требуется ограниченное декодирование или вы создаете приложения с интенсивным совместным использованием префиксов.
