Heim >Backend-Entwicklung >PHP-Tutorial >Apache vs Nginx Leistung: Optimierungstechniken

Apache vs Nginx Leistung: Optimierungstechniken

Joseph Gordon-Levitt
Joseph Gordon-LevittOriginal
2025-02-08 10:07:08887Durchsuche

Apache vs Nginx Performance: Optimization Techniques

Schlüsselpunkte

  • Apache und Nginx sind beide leistungsstarke Webserver, aber ihre Leistungsfunktionen variieren.
  • Die wichtigsten Optimierungen von
  • Apache umfassen das Tuning von Multi-Process-Modulen (MPMS), wie Prepork, Arbeiter und Ereignis, um Verbindungen effizienter zu verarbeiten, und das Deaktivieren von .htaccess, wo möglich, um die Aufwand von Dateisystemen zu reduzieren.
  • Für NGINX umfassen die wichtigsten Leistungsverbesserungen die korrekte Arbeitsprozesse und die Anschlussprozess, die Nutzung von Keepalive -Verbindungen, um den TCP -Overhead zu reduzieren, und die Implementierung von Caching -Richtlinien, um Inhalte schneller zu liefern.
  • Die beiden Server können weiter optimiert werden, indem die Server -Hardware -Konfiguration (z. B. das Hinzufügen von RAM und die Verwendung von SSD) angepasst werden, um sich an die Anforderungen des Webdienstprozesses anzupassen.
  • Die Verwendung von Apache und Nginx in einem Reverse -Proxy -Setup kann die beiden Server nutzen, nutzt Nginx den statischen Inhalt und lastet das Ausgleich, während Apache dynamischen Inhalt übernimmt.
  • kontinuierliche Überwachung und Tests mithilfe von HTOP-, New Relic- und spezifischen Lasttestsoftware sind entscheidend, um Engpässe effektiv zu identifizieren und die Serverleistung zu optimieren.

Vor einigen Jahren war der Webserver der Apache Foundation (als "Apache" bezeichnet) so häufig, dass er zum Synonym für das Wort "Webserver" wurde. Sein Daemon on Linux -System wird httpd (nur bedeutet HTTP -Prozess ) bezeichnet und wird in der Hauptlinux -Verteilung vorinstalliert.

Es wurde ursprünglich 1995 veröffentlicht und wikipedia zitierte: "Es spielte eine Schlüsselrolle bei der frühen Entwicklung des World Wide Web." Laut W3Techs ist es immer noch die am häufigsten verwendete Webserversoftware. Der Marktanteil nimmt jedoch auf der Grundlage der Berichte zurück, die in den letzten zehn Jahren einige Trends aufweisen, und Vergleiche mit anderen Lösungen. NetCraft und Building mit etwas anderen Berichten, aber beide sind sich einig, dass der Marktanteil von Apache im Abwärtstrend, während der Marktanteil von Nginx wächst.

nginx (ausgesprochen Motor x ) wurde 2004 von Igor Sysoev mit ihrem klaren Ziel zur Übertausch von Apache freigesetzt. Die Website von NGINX hat einen Artikel, der es wert ist, diese beiden Technologien zu vergleicht. Zunächst wurde es hauptsächlich als Ergänzung zu Apache verwendet, hauptsächlich zum Servieren statischer Dateien, aber es wurde stetig gewachsen, da es sich weiterentwickelt, um verschiedene Webserveraufgaben zu erledigen.

Es wird üblicherweise als Reverse -Proxy, Lastausgleich und HTTP -Cache verwendet. CDN- und Video -Streaming -Anbieter verwenden es, um Inhaltsablieferungssysteme zu erstellen, die für ihre Leistung von entscheidender Bedeutung sind.

Apache gibt es schon lange und hat viele Module zur Auswahl. Es ist bekannt, dass die Verwaltung von Apache-Servern benutzerfreundlich ist. Durch das Laden von Dynamikmodul können verschiedene Module kompiliert und zum Apache -Stapel hinzugefügt werden, ohne den Hauptserver -Binär neu zu kompilieren. In der Regel befinden sich Module im Linux-Distributions-Repository und können nach ihrer Installation den Stapel mit A2enmod-ähnlichen Befehlen über den Systempaketmanager anmutig hinzugefügt werden. Nginx hat diese Flexibilität noch nicht gesehen. Wenn wir uns die Anleitung zum Einrichten von Nginx ansehen, um HTTP/2 zu unterstützen, muss das Modul das erstellen - konfiguriert zum Erstellenzeit.

Ein weiteres Merkmal, das zur Dominanz des Apache -Marktes beiträgt, ist die .htaccess -Datei. Es ist der Killer von Apache, der es zur bevorzugten Lösung für gemeinsam genutzte Hosting -Umgebungen macht, da es die Steuerung der Serverkonfiguration auf Verzeichnisebene ermöglicht. Jedes Verzeichnis auf dem von Apache bereitgestellten Server kann eine eigene .htaccess -Datei haben.

nginx hat nicht nur keine äquivalente Lösung, sondern verhindert diese Verwendung auch aufgrund von Leistungsauswirkungen.

Apache vs Nginx Performance: Optimization Techniques

Serverhersteller Marktanteil von 1995 bis 2005. Daten von netcraft

leenspeed oder LSWS ist ein Serverkonkurrent, dessen Flexibilitätsniveau mit Apache vergleichbar ist, ohne die Leistung zu beeinträchtigen. Es unterstützt Apache-Stil .htaccess, mod_security und mod_rewrite und ist für die Freigabeeinstellungen in Betracht gezogen. Es ist als direkter Ersatz für Apache geplant und kann mit CPanel und Plesk verwendet werden. Seit 2015 unterstützt es HTTP/2.

lespeed verfügt über drei Lizenzniveaus: OpenLiteSpeed, LSWS Standard und LSWS Enterprise. Standard und Enterprise sind mit einer optionalen Caching -Lösung geliefert, die mit Lack und LSCache in den Server selbst integriert ist und mithilfe von Umschreiben von Regeln in der .htaccess -Datei (jedes Verzeichnis) gesteuert werden kann. Es hat auch einige DDOS -Minderungsbatterien in eingebaut. Dies kombiniert mit seiner ereignisorientierten Architektur zu einem starken Anwärter, der auf leistungsorientierte Hosting-Anbieter abzielt. Es lohnt sich jedoch auch für kleinere Server oder Websites.

Hardware -Vorsichtsmaßnahmen

Wenn wir ein System optimieren, können wir die Aufmerksamkeit auf die Hardwareeinstellungen nicht zu. Unabhängig davon, welche Lösung wir für das Setup wählen, ist es entscheidend, genügend RAM zu haben. Wenn ein Webserverprozess oder ein Interpreter wie PHP nicht über genügend RAM verfügt, beginnen sie zu tauschen, und das Tausch bedeutet tatsächlich, eine Festplatte zum Auffüllen von RAM -Speicher zu verwenden. Der Effekt davon besteht darin, die Latenz jedes Mal zu erhöhen, wenn dieser Speicher zugegriffen wird. Dies erinnert uns an den zweiten Punkt - Festplattenraum. Die Verwendung eines schnellen SSD -Speichers ist ein weiterer Schlüsselfaktor bei der Geschwindigkeit der Website. Wir müssen auch auf die Verfügbarkeit von CPU und den physischen Abstand zwischen dem Server -Rechenzentrum und der Zielgruppe achten.

Um die Hardwareaspekte der Leistungseinstellung tiefer zu verstehen, hat Dropbox einen guten Artikel.

Überwachung

Eine praktische Möglichkeit, die Leistung des aktuellen Serverstapels im Detail zu überwachen, ist HTOP, das für Linux, Unix und MacOS geeignet ist und einen farbenfrohen Überblick über unsere Prozesse bietet.

Apache vs Nginx Performance: Optimization Techniques

Andere Überwachungstools umfassen neue Relikte (eine erweiterte Lösung mit einem vollständigen Satz von Tools) und NetData (eine Open-Source-Lösung, die eine hervorragende Skalierbarkeit, feinkörnige Metriken und anpassbare Web-Dashboards für kleine VPS-Systeme und Server-Netzwerküberwachung bietet). Es kann Warnungen für einen Antrag oder einen Systemprozess per E -Mail, Slack, Pushbullet, Telegramm, Twilio usw. senden.

Apache vs Nginx Performance: Optimization Techniques

Monit ist ein weiteres kopfloses Open -Source -Tool, das das System überwacht und so konfiguriert werden kann, dass sie uns aufmerksam machen, wenn bestimmte Bedingungen erfüllt sind, bestimmte Prozesse neu starten oder das System neu starten.

Testsystem

AB (Apache Benchmark) ist ein einfaches Lasttest -Tool aus der Apache Foundation, und Siege ist ein weiteres Lasttestprogramm. In diesem Artikel wird erläutert, wie sie eingerichtet werden können. Hier finden Sie einige fortgeschrittenere Tipps zu AB, und hier finden Sie ein tieferes Verständnis der Belagerung.

Wenn Sie die Weboberfläche bevorzugen, ist Locust ein pythonbasiertes Tool, das für die Testen der Website sehr bequem ist.

Apache vs Nginx Performance: Optimization Techniques

Nach der Installation der Heuschrecke müssen wir eine Locustfile im Verzeichnis erstellen, aus dem wir sie starten werden:

<code>from locust import HttpLocust, TaskSet, task

class UserBehavior(TaskSet):
    @task(1)
    def index(self):
        self.client.get("/")

    @task(2)
    def shop(self):
        self.client.get("/?page_id=5")

    @task(3)
    def page(self):
        self.client.get("/?page_id=2")

class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    min_wait = 300
    max_wait = 3000
</code>

Dann starten wir es einfach aus der Befehlszeile:

<code>locust --host=https://my-website.com
</code>

Eine Warnung vor diesen Tools für Lasttests: Sie haben die Auswirkung von DDOS -Angriffen, sodass Sie Ihre Tests auf Ihre eigene Website beschränken.

apache

einstellen

apache MPM -Modul

Apache stammt aus dem Jahr 1995 und früh im Internet, wenn eine akzeptable Möglichkeit für Server darin bestand, einen neuen Prozess für jede eingehende TCP -Verbindung zu generieren und darauf zu antworten. Wenn mehr Verbindungen eingehen, werden mehr Arbeitsprozesse erstellt, um sie zu verarbeiten. Die Kosten für die Generierung neuer Prozesse sind sehr hoch, und Apache-Entwickler haben einen -Präpark -Modus entwickelt, in dem eine bestimmte Anzahl von Prozessen vorgefertigt wird. Dynamische Sprachdolmetscher, die in jeden Prozess eingebettet sind (z. B. mod_php), sind immer noch kostspielig, und die Standardeinstellungen von Apache führen dazu, dass der Server zum Absturz kommt. Jeder Prozess kann nur eine eingehende Verbindung verarbeiten.

Dieses Modell heißt mpm_prefork_module im MPM-System von Apache (Multi-Process-Modul). Laut der Website von Apache erfordert dieser Modus eine geringe Konfiguration, wie er sich selbst regulieren kann, und die vor allem die Richtlinie der MaxRequestworker ist groß genug, um so viele gleichzeitige Anfragen zu bearbeiten, wie Sie es erwarten, aber klein genug, um sicherzustellen Alle Prozesse haben genügend physischen RAM .

Apache vs Nginx Performance: Optimization Techniques

Ein kleiner Heuschrecken -Lasttest, der eine große Anzahl von Apache -Prozessen zeigt, die für den eingehenden Verkehr erzeugt werden.

Wir können hinzufügen, dass dieses Muster der Hauptgrund für den berüchtigten Ruf von Apache sein kann. Es kann eine Ressource ineffizient sein.

Version 2.0 von Apache bringt zwei weitere MPMs mit, die versuchen, das Problem der -Präparation -Modus zu lösen. Sie sind Worker -Modul oder mpm_worker_module und Ereignismodul .

Das Arbeitermodul ist nicht mehr prozessbasiert. Zitieren Sie die Website von Apache:

einzelner Steuerungsprozess (übergeordneter Prozess) ist für den Start des untergeordneten Prozesss verantwortlich. Jeder untergeordnete Prozess erstellt eine feste Anzahl von Server -Threads basierend auf der in der Threadsperchild -Anweisung angegebenen Nummer und einem Hörfaden, der nach Verbindungen hört und sie zur Verarbeitung an den Server -Thread übergibt, wenn die Verbindung eingeht.

Dieser Modus spart mehr Ressourcen.

Die Version 2.4 von APache bringt uns das dritte MPM -Ereignismodul. Es basiert auf dem Worker MPM und fügt einen separaten Hörfaden hinzu, der die schläfrige Keepalive -Verbindung nach Abschluss der HTTP -Anforderung verwaltet. Es ist ein nicht blockierender asynchroner Modus mit einem kleineren Speicherpfundwert. Weitere Informationen zu Version 2.4 Verbesserungen finden Sie hier.

Wir haben einen Test -WooCommerce -Installationsprogramm mit etwa 1200 Posts auf dem virtuellen Server geladen und auf Apache 2.4 mit dem Standard -Pre -Regrork -Modus und mod_php getestet.

Erstens haben wir es mit Libapache2-mod-php7 und mmpm_prefork_module unter https://tools.pingdom.com getestet:

:

Apache vs Nginx Performance: Optimization Techniques

Wir haben dann das Ereignis -MPM -Modul getestet.

Wir müssen Multiversum zu unserem /etc/apt/sources.list:

hinzufügen
<code>from locust import HttpLocust, TaskSet, task

class UserBehavior(TaskSet):
    @task(1)
    def index(self):
        self.client.get("/")

    @task(2)
    def shop(self):
        self.client.get("/?page_id=5")

    @task(3)
    def page(self):
        self.client.get("/?page_id=2")

class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    min_wait = 300
    max_wait = 3000
</code>

Dann führen wir sudo APT-Get-Update aus und installieren Sie libapache2-mod-fastcgi und PHP-FPM:

<code>locust --host=https://my-website.com
</code>

Da PHP-FPM ein separater Dienst von Apache ist, muss er neu gestartet werden:

<code>deb http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse
deb http://archive.canonical.com/ubuntu xenial partner</code>

Dann haben wir das Pre -Onk -Modul deaktiviert und den Ereignismodus aktiviert und proxy_fcgi:

<code>sudo apt-get install libapache2-mod-fastcgi php7.0-fpm
</code>

Wir fügen diesen Ausschnitt zu unserem virtuellen Apache -Host hinzu:

<code>sudo service start php7.0-fpm
</code>

Dieser Port muss mit der PHP-FPM-Konfiguration in /etc/php/7.0/fpm/pool.d/www.conf übereinstimmen. Weitere Informationen zu PHP-FPM-Einstellungen finden Sie hier.

Anschließend haben wir die Konfiguration mpm_event in /etc/apache2/mods-available/mpm_event.conf angepasst und daran erinnert, dass die Mini -VPS -Ressourcen, die wir für diesen Test hatten, begrenzt waren - daher haben wir nur einige Standardzahlen reduziert. Einzelheiten zu jeder Richtlinie auf der Apache -Website und Tipps für Event MPM hier. Denken Sie daran, dass die Start -Server eine bestimmte Menge an Speicher verbrauchen, egal wie beschäftigt sie sind. Die Richtlinie der MaxRequestWorkers legt die Anzahl der zulässigen Anforderungen fest: Das Einstellen von MaxConnectionSperchild auf einen Wert ungleich Null ist wichtig, da sie mögliche Speicherlecks verhindert.

<code>from locust import HttpLocust, TaskSet, task

class UserBehavior(TaskSet):
    @task(1)
    def index(self):
        self.client.get("/")

    @task(2)
    def shop(self):
        self.client.get("/?page_id=5")

    @task(3)
    def page(self):
        self.client.get("/?page_id=2")

class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    min_wait = 300
    max_wait = 3000
</code>

Dann verwenden wir Sudo Service Apache2 neu, um den Server neu zu starten (wenn wir einige Anweisungen wie ThreadLimit ändern, müssen wir den Dienst explizit anhalten und mit dem sudo Service apache2 Stop; sudo Service apache2 starten).

Unser Test auf Pingdom zeigt jetzt, dass die Ladezeit der Seite um mehr als die Hälfte reduziert wurde:

Apache vs Nginx Performance: Optimization Techniques

Andere Tipps zum Anpassen von Apache:

deaktivieren.htaccess: HTAccess ermöglicht das Einrichten spezifischer Konfigurationen für jedes Verzeichnis im Server -Root -Verzeichnis ohne Neustart. Daher führt die Iterie aller Verzeichnisse, um die .htaccess -Datei für jede Anfrage zu finden, zu Leistungsverlusten.

zitiert aus Apache -Dokumentation:

Im Allgemeinen sollte die .htaccess -Datei nur verwendet werden, wenn Sie keine Berechtigung haben, auf die primäre Serverkonfigurationsdatei zuzugreifen. … Im Allgemeinen sollten .htaccess -Dateien so weit wie möglich vermieden werden. Sie können jede Konfiguration durchführen, von der Sie glauben, dass Sie die .htaccess -Datei so effizient wie die Verwendung des Abschnitts in der Hauptserverkonfigurationsdatei einfügen möchten.

Die Lösung besteht darin, sie in /etc/apache2/apache2.conf zu deaktivieren:

<code>locust --host=https://my-website.com
</code>

Wenn wir es für ein bestimmtes Verzeichnis benötigen, können wir es im Abschnitt in der virtuellen Hostdatei aktivieren:

<code>deb http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse
deb http://archive.canonical.com/ubuntu xenial partner</code>
Andere Tipps umfassen:

    Verwenden Sie mod_expires, um den Browser -Cache zu steuern - indem Sie den Ablauf -Header einstellen.
  • HostnAmelookups halten - Hostnamelookups Off ist der Standard seit Apache 1.3, aber stellen Sie sicher, dass es ausbleibt, da dies zu Leistungsverlusten führen kann.
  • apache2buddy ist ein einfaches Skript, das wir ausführen und die Tricks zum Anpassung des Systems erhalten können: curl -l
  • https://www.php.cn/link/5b3a93d103a66345e5d404c61c5b5081 |

Apache vs Nginx Performance: Optimization Techniques nginx

nginx ist ein ereignisgesteuerter und nicht blockierender Webserver. Zitieren Sie ein Poster zu Hacker News:

Gabelprozesse sind im Vergleich zu Ereignisschleifen sehr teuer. Der ereignisbasierte HTTP-Server gewinnt letztendlich.

Diese Aussage löste eine ziemlich intensive Debatte über Hacker -Nachrichten aus, aber nach unserer Erfahrung bedeutet das Umschalten von mpm_prefork Apache in Nginx normalerweise normalerweise, dass Websites das Absturz haben. Einfach zu nginx zu wechseln ist normalerweise eine Problemumgehung für sich.

Apache vs Nginx Performance: Optimization Techniques Eine umfassendere visuellere Erklärung der Nginx -Architektur finden Sie hier.

nginx Einstellungen

nginx empfiehlt, die Anzahl der Arbeitnehmer mit der Anzahl der PC -Kerne (wie bei der MPM_Event -Konfiguration von Apache) zu reparieren, indem sie Worker_processes auf automatisch in /etc/nginx/nginx.conf einstellen (Standard ist 1).

Worker_Connections legt die Anzahl der Verbindungen fest, die jeder Arbeitsprozess verarbeiten kann. Die Standardeinstellung ist 512, kann aber normalerweise erhöht werden.

Keepalive Connection ist der Serveraspekt, der die Leistung beeinflusst, die in Benchmarks normalerweise nicht sichtbar ist.

Apache vs Nginx Performance: Optimization Techniques

gemäß Nginx -Website:

HTTP Keepalive Connection ist eine erforderliche Leistungsfunktion, die die Latenz verringert und das Laden der Webseite beschleunigt.

Eine neue TCP -Verbindung kann teuer sein - ganz zu schweigen von der Situation mit https Verschlüsselung. Das HTTP/2 -Protokoll mildert dies mit seinen Multiplex -Funktionen. Die Wiederverwendung vorhandener Verbindungen kann die Antragszeit verkürzen.

apache mpm_prefork und mpm_worker haben Parallelitätsbeschränkungen, was im Gegensatz zur Keepalive -Ereignisschleife steht. Dies wird in einem gewissen Grad im MPM_Event -Modul von Apache 2.4 festgelegt und wird als einziger Standard -Betriebsmodus in Nginx angezeigt. Nginx Worker kann gleichzeitig Tausende von eingehenden Verbindungen verarbeiten. Wenn er als Reverse -Proxy- oder Lastbalancer verwendet wird, verwendet Nginx einen lokalen Keepalive -Verbindungspool ohne TCP -Verbindungsaufwand.

keepalive_requests ist eine Einstellung, die die Anzahl der Anforderungen reguliert, die ein Client durch eine einzige Keepalive -Verbindung stellen kann. Keepalive_Timeout legt die Zeit fest, in der die Leerlauf -Keepalive -Verbindung geöffnet bleibt.

Keepalive ist eine Einstellung, die sich auf die Verbindung von Nginx zu einem Upstream -Server bezieht - wenn es als Proxy- oder Ladebalancer fungiert. Dies bedeutet die Anzahl der freien Vorsteuerung von Keepalive -Verbindungen pro Arbeitsprozess.

Ermöglichen Sie, dass Upstream -Keepalive -Verbindungen diese Anweisungen in die Hauptkonfiguration von Nginx einfügen:

<code>from locust import HttpLocust, TaskSet, task

class UserBehavior(TaskSet):
    @task(1)
    def index(self):
        self.client.get("/")

    @task(2)
    def shop(self):
        self.client.get("/?page_id=5")

    @task(3)
    def page(self):
        self.client.get("/?page_id=2")

class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    min_wait = 300
    max_wait = 3000
</code>

nginx Upstream -Verbindungen werden von ngx_http_upstream_module verwaltet.

Wenn unsere Front-End-Anwendung unsere Back-End-Anwendung für Aktualisierungen befragt, wird die Anzahl der Verbindungen, die hergestellt werden müssen, eine Steigerung von Keepalive_Requests und Keepalive_Timeout beschränkt. Die Keepalive -Richtlinie sollte nicht zu groß sein, um andere Verbindungen zu unserem Upstream -Server zu ermöglichen.

Die Anpassungen an diesen Einstellungen basieren auf der spezifischen Situation und müssen getestet werden. Dies ist vielleicht einer der Gründe, warum Keepalive keine Standardeinstellung hat.

Verwenden von UNIX -Sockeln

standardmäßig verwendet Nginx einen separaten PHP -Prozess, um PHP -Dateianforderungen weiterzuleiten. Hier fungiert es als Proxy (genau wie beim Einrichten von Apache mit Php7.0-FPM).

Normalerweise sind unsere virtuellen Hosteinstellungen mit nginx wie folgt:

<code>locust --host=https://my-website.com
</code>

Da FastCGI und HTTP unterschiedliche Protokolle sind, leiten die ersten beiden Zeilen einige Parameter und Header an PHP -FPM weiter, während die dritte Zeile angibt, wie Proxy -Anforderungen über lokale Netzwerkhöhlen sind.

Dies ist praktisch für das Multi-Server-Setup, da wir auch den Remote-Server angeben können, an dem Anforderungen proxyiert werden sollen.

Wenn wir das gesamte Setup auf einem einzelnen System hosten, sollten wir einen Unix -Socket verwenden, um eine Verbindung zum Hör -PHP -Prozess herzustellen:

<code>deb http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse
deb http://archive.canonical.com/ubuntu xenial partner</code>

UNIX -Sockeln haben eine bessere Leistung als TCP, und diese Einstellung wird als sicherer angesehen. Weitere Informationen zu dieser Einstellung finden Sie in diesem Artikel von Rackspace.

Dieser Tipp über Unix -Sockets funktioniert auch für Apache. Weitere Details finden Sie hier.

gzip_static: Die allgemeine Ansicht auf die Leistung von Webserver besteht darin, unsere statischen Ressourcen zu komprimieren. Dies bedeutet normalerweise, dass wir versuchen, Kompromisse zu kompromittieren und nur Dateien zu komprimieren, die einen bestimmten Schwellenwert überschreiten, da dynamische Komprimierung von Ressourcen für jede Anfrage teuer sein kann. Nginx verfügt über eine gzip_statische Anweisung, mit der wir eine GZIP -Version der Datei (Erweiterung .GZ) anstelle einer regulären Ressource bereitstellen können:

<code>from locust import HttpLocust, TaskSet, task

class UserBehavior(TaskSet):
    @task(1)
    def index(self):
        self.client.get("/")

    @task(2)
    def shop(self):
        self.client.get("/?page_id=5")

    @task(3)
    def page(self):
        self.client.get("/?page_id=2")

class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    min_wait = 300
    max_wait = 3000
</code>

Auf diese Weise versucht Nginx, style.css.gz anstelle von style.css bereitzustellen (in diesem Fall müssen wir uns selbst bewältigen).

Auf diese Weise werden die CPU -Zyklen für jede Anforderung nicht bei dynamischer Komprimierung verschwendet.

cache mit nginx

Die Geschichte über Nginx ist unvollständig, ohne zu erwähnen, wie Inhalte zwischengespeichert werden. Das Nginx -Caching ist so effizient, dass viele Systemadministratoren der Meinung sind, dass eine separate HTTP -Cache -Schicht (wie Lack) keinen großen Sinn macht. "Einfachheit ist ein Merkmal." Das Aktivieren von Nginx -Caching ist sehr einfach.

<code>locust --host=https://my-website.com
</code>

Dies ist die Anweisung, die wir in der virtuellen Hostdatei außerhalb des Serverblocks platzieren. Der Parameter proxy_cache_path kann jeder Pfad sein, den wir den Cache speichern möchten. Levels gibt an, wie viele Verzeichnisstufen Nginx zwischengespeicherte Inhalte speichern sollte. Aus Leistungsgründen sind zwei Ebenen normalerweise in Ordnung. Es kann zeitaufwändig sein, das Verzeichnis zu durchqueren. Der Parameter keys_zone ist der Name des gemeinsam genutzten Speicherbereichs, der zum Speichern von Cache -Tasten verwendet wird, und 10 m ist der Speicherplatz für diese Schlüssel im Speicher (10 MB reicht normalerweise aus; dies ist nicht der Speicherplatz für den tatsächlichen zwischengespeicherten Inhalt). max_size ist optional, was die Obergrenze des zwischengespeicherten Inhalts festlegt - hier ist 10 GB. Wenn nicht angegeben, wird alle verfügbaren Platz in Anspruch genommen. Inactive gibt an, wie lange der Inhalt im Cache bleiben kann, bevor er angefordert und dann von Nginx gelöscht wird.

Nach der Einstellung fügen wir die folgende Zeile hinzu, die den Namen des Speicherbereichs zum Server- oder Standortblock enthält:

<code>deb http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse
deb http://archive.canonical.com/ubuntu xenial partner</code>

Zusätzliche fehlertolerante Stufe von Nginx können implementiert werden, indem Nginx angefochten, Elemente aus dem Cache bereitzustellen, wenn ein Fehler auf dem Quellserver, dem Upstream-Server oder der Ausfallzeit von Server auftritt:

<code>sudo apt-get install libapache2-mod-fastcgi php7.0-fpm
</code>

Weitere Informationen zum Server- oder Standortblockanweisungen zum weiteren Optimieren des Nginx -Cache finden Sie hier.

Proxy cache Richtlinien werden für statische Ressourcen verwendet, aber wir möchten normalerweise die dynamische Ausgabe unserer Webanwendung zwischenspeichern - ob CMS oder etwas anderes. In diesem Fall werden wir die Fastcgi cache anstelle von Proxy cache *:

verwenden
<code>sudo service start php7.0-fpm
</code>

Die letzte Zeile oben setzt den Antwortheader, um uns mitzuteilen, ob der Inhalt aus dem Cache übergeben wird oder nicht.

Dann können wir in unserem Server- oder Standortblock einige Cache -Ausnahmen festlegen - beispielsweise, wenn eine Abfragezeichenfolge in der Anforderungs -URL vorliegt:

<code>sudo a2dismod php7.0 mpm_prefork
sudo a2enmod mpm_event proxy_fcgi
</code>

Auch im Fall von PHP im .php -Block im Server werden wir so etwas wie folgt hinzufügen:

<code><filesmatch>
    SetHandler "proxy:fcgi://127.0.0.1:9000/"
</filesmatch></code>

Oben, FASTCGI_CACHE* Zeilen und Fastcgi_no_cache regulieren das Caching und den Ausschluss. Ein detaillierter Verweis auf all diese Anweisungen finden Sie auf der Nginx -Dokumentations -Website.

Um mehr zu erfahren, hat NGINX-Mitarbeiter ein kostenloses Webinar zu diesem Thema bereitgestellt und es sind viele E-Books verfügbar.

Schlussfolgerung

Wir versuchen, einige Technologien einzuführen, mit denen die Leistung der Webserver und die dahinter stehenden Theorien verbessert werden. Dieses Thema ist jedoch keineswegs erschöpfend: Wir decken immer noch keine Reverse-Proxy-Einstellungen oder Einstellungen für mehrere Server aus Apache und Nginx ab. Die besten Ergebnisse für beide Server hängen von der Test- und Analyse spezifischer tatsächlicher Fälle ab. Dies ist ein unendliches Thema.

FAQs über Apache und Nginx Performance Optimization Technology

Was ist der Schlüsselunterschied zwischen Apache und Nginx in Bezug auf Leistung und Optimierung?

apache und nginx sind beide leistungsstarke Webserver, aber es gibt signifikante Unterschiede in Bezug auf Leistungs- und Optimierungsfunktionen. Apache ist ein älterer Server, der ein prozessorientiertes Modell verwendet, um für jede Anforderung einen neuen Thread zu erstellen. Dies kann zu einer großen Menge an Speicherverbrauch führen, wenn sie mit mehreren gleichzeitigen Verbindungen zu tun haben. Nginx hingegen verwendet eine ereignisgesteuerte Architektur, mit der Tausende von Verbindungen gleichzeitig mit sehr wenig Speicherverbrauch verarbeitet werden können. Dies macht Nginx effizienter und schneller, insbesondere in der Bereitstellung statischer Inhalte und der Reverse -Proxy -Szenarien.

Wie optimieren Sie Nginx für eine bessere Leistung?

Es gibt mehrere Möglichkeiten, Nginx für eine bessere Leistung zu optimieren. Zunächst können Sie den Arbeitsprozess und die Arbeiterverbindung anpassen. Der Arbeitsprozess sollte auf die Anzahl der CPUs oder Kerne eingestellt werden, während die Arbeiterverbindung auf die maximale offene Dateilimit eingestellt werden sollte. Zweitens können Sie die GZIP -Komprimierung ermöglichen, um die Größe der Daten zu verringern, die Nginx an den Client sendet. Drittens können Sie Cache verwenden, um häufig auf Daten im Speicher auf Daten zu zu speichern, wodurch die E/A -Operationen der Festplatte reduziert werden. Schließlich können Sie Lastausgleich verwenden, um den Netzwerkverkehr über mehrere Server hinweg zu verbreiten und die Reaktionszeit und die Gesamtleistung zu verbessern.

Wie optimieren Sie Apache für eine bessere Leistung?

Apache kann auf verschiedene Weise optimiert werden. Zunächst können Sie die Richtlinie der Maxclients anpassen, um die maximale Anzahl gleichzeitiger Verbindungen zu steuern. Zweitens können Sie mod_deflate aktivieren, um Daten zu komprimieren, bevor Sie sie an den Client senden, wodurch die Gebrauchsnutzung der Bandbreite verringert wird. Drittens können Sie Mod_Cache für Cache verwenden, um häufig auf Daten im Speicher auf Daten zu zu speichern, wodurch die E/A -Operationen der Festplatte reduziert werden. Schließlich können Sie den Balancing mit mod_proxy_balancer laden, um den Netzwerkverkehr über mehrere Server hinweg zu verbreiten und die Reaktionszeit und die Gesamtleistung zu verbessern.

Kann ich Apache und Nginx gleichzeitig verwenden?

Ja, Sie können sowohl Apache als auch Nginx in Ihren Reverse -Proxy -Einstellungen verwenden. In dieser Konfiguration fungiert Nginx als Front-End-Server, der Client-Anfragen übernimmt, und Apache fungiert als Back-End-Server, der diese Anforderungen bearbeitet. Dieses Setup kombiniert die Vorteile beider Server, nginx verarbeitet den statischen Inhalt effizient, während Apache eine dynamische Inhaltsverarbeitung bietet.

Wie geht Nginx auf unterschiedliche Weise mit statischen und dynamischen Inhalten um?

nginx ist aufgrund ihrer ereignisgesteuerten Architektur bei der Bereitstellung statischer Inhalte ausgestattet, mit der Tausende von gleichzeitigen Verbindungen gleichzeitig mit minimaler Speicherverwendung verarbeitet werden können. Für dynamische Inhalte kann NGINX Anforderungen an einen Anwendungsserver (z. B. PHP-FPM) übergeben oder an einen Apache-Server proxy. Nginx verwaltet jedoch nicht dynamischen Inhalt lokal, wie Apache das Modul mod_php verwendet.

Wie geht Apache auf unterschiedliche Weise mit statischen und dynamischen Inhalten um?

Apache kann statische und dynamische Inhalte liefern. Für statische Inhalte verwendet Apache seine Kernmodule. Für dynamische Inhalte verwendet Apache zusätzliche Module wie mod_php, um PHP -Skripte zu verarbeiten. Das prozessorientierte Modell von Apache kann jedoch zu einer großen Menge an Speicherverbrauch führen, wenn sie mit mehreren gleichzeitigen Verbindungen zu tun haben, was es in Bezug auf die Bereitstellung statischer Inhalte weniger effizient als nginx macht.

Welche Auswirkungen hat die Serveroptimierung auf die Leistung der Website?

Serveroptimierung kann die Leistung der Website erheblich verbessern. Es kann die Reaktionszeit des Servers verkürzen, die Anzahl der gleichzeitigen Verbindungen erhöhen, die der Server verarbeiten kann, und die Gebrauchsgebrauch der Bandbreite verringern. Dies kann zu schnelleren Seitenladezeiten, besserer Benutzererfahrung und verbesserter SEO -Rangliste führen.

Wie wählen Sie zwischen Apache und Nginx?

Die Wahl zwischen Apache und Nginx hängt von Ihren spezifischen Anforderungen ab. Wenn Sie einen Server benötigen, der viele gleichzeitige Verbindungen effizient verarbeiten kann oder Sie hauptsächlich statische Inhalte bedienen, ist Nginx möglicherweise eine bessere Wahl. Wenn Sie einen Server benötigen, der eine starke Unterstützung für die dynamische Inhaltsverarbeitung hat oder sich auf .htaccess -Dateien zur Konfiguration verlassen, ist Apache möglicherweise besser geeignet.

Was sind einige häufigste Leistungsprobleme mit Apache und Nginx?

Zuhäufige Leistungsprobleme mit Apache gehören bei der Behandlung mehrerer gleichzeitiger Verbindungen hohe Speicherverwendung und langsame Reaktionszeiten. Zu den häufigen Problemen für NGINX gehören eine unsachgemäße Konfiguration von Arbeitsprozessen und Verbindungen und mangelnde dynamische Inhaltsverarbeitungsfunktionen.

Wie überwacht man die Leistung von Apache und Nginx?

Sie können eine Vielzahl von Tools verwenden, um die Leistung von Apache und Nginx zu überwachen. Für Apache können Sie das Modul mod_status verwenden, um Serverstatusinformationen bereitzustellen. Für Nginx können Sie das Modul stub_status verwenden. Darüber hinaus können Sie Überwachungstools von Drittanbietern wie neuer Relikt-, Datadog- oder Nagios verwenden, um detailliertere Leistungsmetriken und -alarme zu erhalten.

Das obige ist der detaillierte Inhalt vonApache vs Nginx Leistung: Optimierungstechniken. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn