Node.js App deployen: PM2 und Nginx Anleitung
Vollständige Anleitung zum Deployen von Node.js-Anwendungen auf einem VPS. Node.js-Installation mit nvm, PM2 Process Manager, Nginx Reverse Proxy, SSL-Zertifikat und Umgebungsvariablen.
Was ist CDN, Cloudflare kostenloses CDN-Setup, Nginx Cache-Header-Konfiguration, gzip/brotli-Komprimierung, Bildoptimierung und Cache-Control-Header-Anleitung.
Die Geschwindigkeit Ihrer Website ist entscheidend für Benutzererfahrung und SEO-Rankings. CDN (Content Delivery Network) und statische Dateioptimierung können Seitenladezeiten dramatisch reduzieren. Diese Anleitung behandelt CDN-Grundlagen, Cloudflare-Setup, Nginx-Cache-Konfiguration und Kompressionstechniken.
Ein CDN (Content Delivery Network) ist eine Netzwerkinfrastruktur, die statische Inhalte (Bilder, CSS, JavaScript, Videos) auf Server weltweit verteilt und Benutzern vom nächstgelegenen Server bereitstellt.
Vorteile eines CDN:
Cloudflare bietet CDN, DDoS-Schutz und SSL-Zertifikat im kostenlosen Plan.
Cloudflare scannt Ihre vorhandenen DNS-Einträge automatisch:
A @ 203.0.113.50 Proxied (orange Wolke)
A www 203.0.113.50 Proxied (orange Wolke)
CNAME api api.example.com DNS only (graue Wolke)
Die Option "Proxied" (orange Wolke) leitet Traffic durch Cloudflare und bietet CDN + DDoS-Schutz. "DNS only" (graue Wolke) führt nur DNS-Auflösung durch.
Ändern Sie die Nameserver bei Ihrem Domain-Registrar auf die von Cloudflare bereitgestellten Werte:
ns1.cloudflare.com
ns2.cloudflare.com
SSL/TLS: Full (strict) Modus wählen
Caching:
Speed:
server {
listen 80;
server_name example.com;
root /var/www/mysite;
# HTML-Dateien - kein Caching
location ~* \.html$ {
add_header Cache-Control "no-cache, must-revalidate";
}
# CSS und JavaScript - langer Cache für versionierte Dateien
location ~* \.(css|js)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# Bilder
location ~* \.(jpg|jpeg|png|gif|ico|webp|avif|svg)$ {
expires 1y;
add_header Cache-Control "public, immutable";
add_header Vary "Accept-Encoding";
}
# Schriftdateien
location ~* \.(woff|woff2|ttf|eot|otf)$ {
expires 1y;
add_header Cache-Control "public, immutable";
add_header Access-Control-Allow-Origin "*";
}
# API-Endpunkte - kein Caching
location /api/ {
add_header Cache-Control "no-store, no-cache";
proxy_pass http://localhost:3000;
}
}
Gzip komprimiert textbasierte Dateien (HTML, CSS, JS) und reduziert die Übertragungsgröße um 60-80%.
http {
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_min_length 256;
gzip_types
text/plain
text/css
text/xml
text/javascript
application/json
application/javascript
application/xml
image/svg+xml
font/truetype
font/opentype;
}
Brotli bietet 15-25% bessere Komprimierung als gzip und wird von modernen Browsern unterstützt.
# Brotli-Modul installieren
sudo apt install libnginx-mod-brotli -y
http {
brotli on;
brotli_comp_level 6;
brotli_static on;
brotli_types
text/plain
text/css
application/json
application/javascript
image/svg+xml;
}
sudo nginx -t && sudo systemctl reload nginx
# Komprimierung testen
curl -H "Accept-Encoding: br" -I https://example.com
# Sollte zeigen: Content-Encoding: br
WebP-Format bietet 25-35% kleinere Dateigrößen im Vergleich zu JPEG und PNG.
# cwebp-Tool installieren
sudo apt install webp -y
# Einzelne Datei konvertieren
cwebp -q 80 image.jpg -o image.webp
# Stapelkonvertierung
for f in /var/www/mysite/images/*.jpg; do
cwebp -q 80 "$f" -o "${f%.jpg}.webp"
done
map $http_accept $webp_suffix {
default "";
"~*webp" ".webp";
}
server {
location ~* \.(jpg|jpeg|png)$ {
add_header Vary Accept;
try_files $uri$webp_suffix $uri =404;
}
}
| Inhaltstyp | Cache-Control | Beschreibung |
|---|---|---|
| HTML | no-cache | Immer aktuell |
| CSS/JS (gehasht) | public, immutable, max-age=31536000 | 1 Jahr |
| Bilder | public, max-age=31536000 | 1 Jahr |
| API-Antworten | no-store | Nie cachen |
Verwenden Sie Chrome DevTools > Network-Tab zum Testen von Cache-Headern. Prüfen Sie Cache-Control, ETag und Age-Werte in den Response-Headern.
CDN-Integration und statische Dateioptimierung verbessern die Performance Ihrer Website erheblich. Die Kombination aus Cloudflare Free CDN für globale Verteilung, Nginx-Cache-Headern für Browser-Caching, gzip/brotli für Komprimierung und WebP für Bildoptimierung kann Seitenladezeiten dramatisch reduzieren.
Wählen Sie den Modus 'Full (strict)' in den Cloudflare SSL/TLS-Einstellungen. Stellen Sie sicher, dass Ihr Server ein gültiges SSL-Zertifikat (Let's Encrypt) hat. Der 'Flexible'-Modus ist unsicher; die Verbindung zwischen Server und Cloudflare ist nicht verschlüsselt.
Im Cloudflare Dashboard > Caching > Purge Cache können Sie den gesamten Cache oder bestimmte URLs leeren. Für Nginx FastCGI-Cache verwenden Sie 'sudo rm -rf /var/cache/nginx/fastcgi/*'. Zum Leeren des Browser-Caches drücken Sie Ctrl+Shift+R (Hard Refresh).
Prüfen Sie mit 'curl -H "Accept-Encoding: gzip" -I https://example.com'. Die Antwort sollte 'Content-Encoding: gzip' zeigen. Alternativ prüfen Sie den Content-Encoding-Wert in Chrome DevTools > Network > Response Headers.
Cloudflare sendet die echte IP im CF-Connecting-IP-Header. Definieren Sie in Nginx Cloudflare-IP-Bereiche mit der 'set_real_ip_from'-Direktive und fügen Sie 'real_ip_header CF-Connecting-IP;' hinzu. So sehen Sie die echte Benutzer-IP in Log-Dateien und Ihrer Anwendung.
Vollständige Anleitung zum Deployen von Node.js-Anwendungen auf einem VPS. Node.js-Installation mit nvm, PM2 Process Manager, Nginx Reverse Proxy, SSL-Zertifikat und Umgebungsvariablen.
Vollständige Anleitung zum Deployen von PHP-Anwendungen auf einem VPS. LAMP vs LEMP Vergleich, Apache/Nginx + PHP-FPM + MySQL Setup, Virtual Host Konfiguration und PHP-Versionsverwaltung.
Anleitung zur Installation und Optimierung von WordPress auf einem VPS. LEMP Stack Setup, wp-config.php Einstellungen, Dateiberechtigungen, SSL, OPcache Performance-Optimierung und Sicherheitshärtung.