Unterschied Apache vs Nginx - Nginx ├╝berholt Apache

Ich habe f├╝r den Betrieb meiner Webseiten lange Zeit Apache als Webserver verwendet und sp├Ąter in Docker immer wieder mal Nginx. Der alternative Webserver Nginx erfreut sich zunehmender Beliebtheit und l├Âst in j├╝ngster Vergangenheit Apache als Webserver in vielen Bereichen mehr und mehr ab. Ein Grund daf├╝r ist dessen Performance: Der etwas j├╝ngere, aber dennoch l├Ąngst erwachsene Nginx punktet an dieser Stelle. F├╝r Apache habe ich bei meinen Setups .htaccess-Dateien f├╝r das direkte Steuern von Ordnern verwendet: Nginx interpretiert diese aber nicht, entsprechend muss beim Umstieg eine alternative Konfiguration erstellt werden. F├╝r g├Ąngige Anforderungen kein Problem, bei speziellen Setups, zum Beispiel anhand eines Cookies verschiedene Pfade zu verwenden, wurde es dann knifflig, dies konnte ich dann nur mit einem unsch├Ânen Workaround umsetzen.

Webserver Marktanteil

Zuerst mal ein ├ťberblick ├╝ber die Verbreitung der einzelnen Webserver. Glaubt man w3techs.com, hat Nginx Apache im Mai 2021 mit einem hauchd├╝nnen Vorsprung ├╝bertroffen:

Webserver Marktanteil in %
Nginx 34.4%
Apache 31.8%
Cloudflare Server 20.5%
LiteSpeed 11.9%
Microsoft-IIS 5.5%
Quelle: w3techs.com; Liste zuletzt aktualisiert: 07.06.2023

Apache - HTTPd

Den Apache HTTP Server gibt es bereits seit 1995, aktuell in der Version: 2.4.57 (gefunden: 07.04.2023). 

Durch die .htaccess-Datei k├Ânnen bestimmte Eigenschaften des Webservers auf Ordnerebene konfiguriert werden. Als Beispiel ben├Âtigt ein Betreiber einer Webseite rein einen Ordnerzugriff per FTP. Dank der .htaccess Datei k├Ânnen alle relevanten Servereinstellungen, wie Ordnerumleitungen, PHP-Settings etc. ├╝ber die Datei im Webverzeichniss gesteuert werden: Ideal f├╝r ein Webhosting mehrerer unterschiedlicher Seiten und Betreiber auf einem Server. Aus diesem Grund ist Apache bei Shared Hostern immer noch sehr beliebt.

Vorteile

  • Dank der .htaccess-Dateien kann der Zugriff auf bestimmte Ordner gesteuert werden. Die Konfiguration kann dabei direkt in dem jeweiligen Ordner hinterlegt werden.
  • Module im laufenden Betrieb laden
  • flexible Konfiguration und im Vergleich zu nginx mehr M├Âglichkeiten: speziell f├╝r Shared Hoster.

Nginx

Der deutlich j├╝ngere Nginx wurde erstmals im Jahre 2004 ver├Âffentlicht und befindet sich aktuell in der Version┬á1.25.0 (gefunden: 24.05.2023). Nginx kann nicht nur als Webserver, sondern auch als Reverse oder Email-Proxy eingesetzt werden. Unter anderem beschleunigt das Ignorieren der .htaccess-Datei den Zugriff: Apache muss bei jedem Aufruf die .htaccess-Dateien aller m├Âglichen Ordner suchen und falls vorhanden, lesen und interpretieren; Nginx hingegen verwendet eine zentrale Konfiguration, die sich nach dem Starten im RAM befindet.┬á

Vorteile

  • Geschwindigkeit, speziell bei statischen Files und hohen Zugriffszahlen ist Nginx meist schneller als Apache

Konfig-Beispiele im Vergleich: Apache vs Nginx

Wie bereits erw├Ąhnt kann die Konfiguration von Apache ├╝ber die .htaccess-Datei erfolgen. Nginx hingegen verwendet eine Konfig-Datei au├čerhalb des Web-Ordners: nginx.conf.

Header Cache Control

Sowohl Apache, als auch Nginx k├Ânnen bestimmten Dateitypen einen Cache Header hinzuzuf├╝gen.

Apache

<FilesMatch "\.(ico|pdf|jpg|png|gif|jpeg|js|css)$">
 Header set Cache-Control "max-age=172800, public, must-revalidate"
</FilesMatch>

Nginx

http {
    ...
    server {
     ...
        location ~* \.(js|css|png|jpg|jpeg|gif|svg|ico)$ {
            expires 7d;
            add_header Cache-Control "public, no-transform";
        }

GZIP Compression

Um Bandbreite zu sparen, kann die Seite komprimiert ausgeliefert werden.

Apache

<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
</IfModule> 

Nginx

http {
    ...
    gzip  on;
    gzip_vary on;
    gzip_min_length 10240;
    gzip_proxied any;
    gzip_comp_level 1;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

Redirect to www.

Nicht www. Seiten k├Ânnen wie folgt auf eine www. Seite umgeleitet werden:

Apache

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

Nginx

server {
    listen       80;
    server_name  domain.tld;
    return       301 $scheme://www.domain.tld$request_uri;
}

server {
    listen       80;
    server_name  www.domain.tld;
    ...
}

Basic Authentication 

Nginx

    server {
...
        auth_basic           "please enter a Username and Password";
        auth_basic_user_file /var/www/.htpasswd;

Cookies - Cache

Apache

In Apache k├Ânnen Cookies einfach ├╝ber eine RewriteCondition abgerufen werden:

RewriteCond %{HTTP_COOKIE} cookiename=cookievalue; [NC] 

Als Beispiel pr├╝fen folgende Regeln, ob ein Cookie gesetzt ist und ein Cache-File existiert und verwendet dieses f├╝r den Aufruf:

            RewriteCond %{HTTP_COOKIE} cache=no; [NC] 
            RewriteCond %{DOCUMENT_ROOT}/page-cache/pc__index__pc.html -f
            RewriteRule .? page-cache/pc__index__pc.html [L]

Nginx - Cookies und if

Um Pfade abh├Ąngig von einem Cookie zu steuern, bin ich bei Nginx etwas an die Grenzen gesto├čen. In Nginx k├Ânnen Cookies zwar in einer IF-Abfrage verwendet werden, die IF-Abfrage verh├Ąlt sich aber nicht so wie ich mir das erwartet h├Ątte, daher konnte ich die Abfrage nur ├╝ber den Umwege einer Variable und Named Location anwenden:

http {
        #set variables for Cache...
        set $shouldusecache4root @usecache4root;

        #if Cookie
        if ($http_cookie ~* "cache=no(?:;|$)") {
            set $shouldusecache4root @nocache4root;
        }

        #hack locations...
        location = / {
            try_files /dev/null $shouldusecache4root;
        }

        #use named location from hacked location...
        location @nocache4root {
            try_files $uri /index.php?$is_args$args;
        }
        
...

siehe auch: serverfault.com/questions/908086/nginx-directly-send-from-location-to-another-named-location/965779#965779 und www.nginx.com/resources/wiki/start/topics/depth/ifisevil/

Wer an dieser Stelle eine besser L├Âsung wei├č, bitte gerne in den Kommentaren ...

Fazit

Beide Webserver, sowohl Nginx, als auch Apache sind mit einer OpenSource-Lizenz versehen, bieten zahlreiche Features und in etwa die gleiche Sicherheit. In der Praxis spielt es f├╝r die meisten Anforderungen keine Rolle welcher der beiden Webserver verwendet wird. Apache hat seine St├Ąrken beim Einsatz in einer Shared-Hosting-Umgebung, Nginx beim Bereitstellen von statischen Inhalten f├╝r hochfrequentierte Seiten. Um die Performance einer Seite zu messen, siehe auch Webseite Stresstest - Performance messen Anfragen/Sekunde.

positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE f├╝r deine Bewertung!

Fragen / Kommentare


Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu Mehr Details