[[start|zurück]] ====== Webserver – Apache & Nginx – Grundlagen ====== Ein Webserver stellt Webseiten, APIs oder Anwendungen bereit und liefert HTTP- bzw. HTTPS-Inhalte an Clients wie Browser oder Apps aus. Die beiden bekanntesten Webserver sind: * **Apache HTTP Server** * **Nginx (sprich: Engine-X)** Beide sind weit verbreitet, aber unterschiedlich aufgebaut und eingesetzt. ===== Aufgaben eines Webservers ====== * Bereitstellen von Webseiten (HTML, CSS, JS) * Ausliefern von Bildern, Downloads, Dateien * Ausführen von Webanwendungen (PHP, Python, FastCGI) * HTTPS-Verschlüsselung via TLS * Reverse Proxy für Backend-Dienste * Weiterleitungen, Rewrite-Regeln * Logging von Zugriffen ===== Apache – Grundlagen ====== Apache ist modular aufgebaut und gilt als sehr flexibel. Ideal, wenn viele Funktionen gebraucht werden. ==== Merkmale ==== * Prozessbasiert (jeder Client erzeugt eigenen Prozess/Thread) * sehr flexibel dank vieler Module * traditionell für PHP-Anwendungen (z. B. WordPress, Joomla) * gute .htaccess-Unterstützung Module (Beispiele): * `mod_ssl` – TLS/HTTPS * `mod_rewrite` – URL-Umschreibungen * `mod_php` – PHP direkt ausführbar ==== Standardverzeichnisse (Debian/Ubuntu) ==== /etc/apache2/ /var/www/html/ Konfigurationen: * `/etc/apache2/sites-available/*.conf` * aktivieren via: a2ensite sitename.conf systemctl reload apache2 ==== Beispiel Virtual Host ==== ServerName example.com DocumentRoot /var/www/example ===== Nginx – Grundlagen ====== Nginx ist moderner, schlanker und extrem performant. Er ist besonders gut geeignet als: * Reverse Proxy * Load Balancer * Webserver für statische Dateien ==== Merkmale ==== * ereignisbasiert (event-driven) * sehr ressourcenschonend * extrem leistungsfähig bei vielen Verbindungen * bevorzugt für Microservices/Docker * PHP per FastCGI statt direkt ==== Standardverzeichnisse (Debian/Ubuntu) ==== /etc/nginx/ /var/www/html/ Aktivierung von Sites: ln -s /etc/nginx/sites-available/site.conf /etc/nginx/sites-enabled/ nginx -t systemctl reload nginx ==== Beispiel Serverblock (Virtual Host) ==== server { listen 80; server_name example.com; root /var/www/example; location / { try_files $uri $uri/ =404; } } ===== Apache vs. Nginx – Vergleich ====== | Kategorie | Apache | Nginx | |------------------|-------------------------------|-------------------------------| | Architektur | prozess-/threadbasiert | event-driven | | Geschwindigkeit | mittel | sehr hoch | | Ressourcenbedarf | höher | sehr gering | | PHP-Unterstützung | direkt via mod_php | via PHP-FPM (FastCGI) | | .htaccess | unterstützt | nicht unterstützt | | guter Einsatzort | klassische Webanwendungen | Reverse Proxy, moderne Setups | ===== Reverse Proxy – Beispiel Nginx ====== Nginx vor einem Backend (z. B. Docker-Service): location /api/ { proxy_pass http://localhost:8080/; } ===== HTTPS mit TLS (beide Server) ====== Beispiel (Nginx): server { listen 443 ssl; ssl_certificate /etc/ssl/certs/fullchain.pem; ssl_certificate_key /etc/ssl/private/key.pem; } Apache: SSLEngine on SSLCertificateFile /etc/ssl/certs/fullchain.pem SSLCertificateKeyFile /etc/ssl/private/key.pem ===== Logging ====== Apache: /var/log/apache2/access.log /var/log/apache2/error.log Nginx: /var/log/nginx/access.log /var/log/nginx/error.log ===== Docker & Webserver ====== Nginx ist in Docker-Umgebungen extrem beliebt wegen: * wenig RAM * guter Performance * Reverse-Proxy-Fähigkeiten Apache wird oft in LAMP-Stacks genutzt. ===== Sicherheitshinweise ====== * TLS erzwingen (Redirect zu HTTPS) * Prinzip „Least Privilege“ * keine .git- oder .env-Dateien ausliefern * Rate-Limits setzen (Nginx) * aktuelle Versionen nutzen * WAF-Integration möglich (z. B. ModSecurity) ===== ASCII-Übersicht ====== Browser → HTTP/HTTPS → Webserver (Apache/Nginx) → Anwendung ===== Zusammenfassung ====== * Apache = flexibel, modular, ideal für klassische Websites * Nginx = schnell, modern, ideal für Reverse Proxy & Docker * beide liefern Webseiten, Anwendungen und APIs aus * TLS-Verschlüsselung ist Pflicht in modernen Umgebungen * zentrale Komponenten jeder Infrastruktur