Heim >php教程 >PHP开发 >Lampenarchitektur

Lampenarchitektur

高洛峰
高洛峰Original
2016-12-01 13:41:371542Durchsuche

1. Beschreibung des Apache-Prozessmodus

Unter Linux können wir httpd-l verwenden, um zu überprüfen, ob sich das installierte Modul im Prefork-Modus oder Worker-Modus befindet

[root@LAMP ~]# / usl /local/apache/bin/apachectl -l|egrep "worker|prefoker"

worker.c

[root@LAMP ~]#

oder

[root@LAMP ~]# /usr/local/apache/bin/apachectl -l |sed -n '/worker|prefork/p'

worker.c

[ root @LAMP ~]#

Prefork-Modus (Standard)

Prefork verwendet mehrere Unterprozesse und jeder Unterprozess hat nur einen Thread. Jeder Prozess kann nur eine Verbindung aufrechterhalten.

Funktionsprinzip:

Der Steuerungsprozess etabliert zunächst mehrere Teilprozesse. Um Teilprozesse bei eingehenden Anforderungen nicht neu zu generieren, müssen laufend neue Teilprozesse nach Bedarf erstellt werden kann maximal 32 Unterprozesse pro Sekunde erreichen, bis der Bedarf gedeckt ist.

Worker-Modus (Standard)

Der Worker-Modus ist ein neu eingeführter Modus in Apache2.x. Es handelt sich um eine Kombination aus Threads und Prozessen. Im Worker-Modus gibt es mehrere untergeordnete Prozesse Jeder untergeordnete Prozess wird mehrere Threads haben. Jeder Thread kann zu einem bestimmten Zeitpunkt nur eine Verbindung aufrechterhalten.

Funktionsprinzip:

Der Hauptsteuerungsprozess generiert mehrere Unterprozesse, und jeder Unterprozess enthält eine feste Anzahl von Threads. Jeder Thread verarbeitet die Anforderung unabhängig, auch um keine zu generieren Wenn die Anforderung eintrifft, werden die minimale und maximale Anzahl der Threads sowie die Gesamtanzahl der Threads aller untergeordneten Prozesse in der Konfigurationsdatei festgelegt , erzeugt der Steuerungsprozess einen neuen untergeordneten Prozess.

Installationsmethode:

Fügen Sie während des Konfigurations- und Kompilierungsprozesses den Parameter --with-mpm=worker hinzu. Wenn er nicht hinzugefügt wird, übernimmt das System den Standard-Prefork-Modus

Vorteile: Geringere Speichernutzung als im Prefork-Modus, geeignet für HTTPD-Dienste mit hoher Parallelität und hohem Datenverkehr

Nachteile: Wenn ein Thread abstürzt, „stirbt“ der gesamte Prozess zusammen mit allen seinen Threads. Da sich Threads den Speicherplatz teilen, muss ein Programm beim Ausführen vom System als „per-Thread-sicher“ erkannt werden. Die Servicestabilität ist nicht so gut wie im Prefork-Modus.

Ereignismodus: Bei einem sehr ausgelasteten Server sind die beiden oben genannten Server aufgrund des Workers etwas überlastet, wodurch der Dienstprozess von der Verbindung getrennt wird. Wenn die Serververarbeitungsgeschwindigkeit sehr hoch und die Klickrate sehr hoch ist, ist die Anzahl der verfügbaren Threads die wichtigste Ressourcengrenze. Zu diesem Zeitpunkt ist die Event-MPM-Methode am effektivsten

1.prefork:

StartServers 5 Clients 150 #Maximale Anzahl verarbeiteter Anfragen, die den größten Einfluss auf die Leistung hat. Das Standardmaximum beträgt 256. Warteschlange mehr

MaxRequestsPerChild 0 #Die maximale Anzahl der vom Prozess verarbeiteten Anforderungen, 0 ist unbegrenzt. Sie können ihn größer einstellen und es ist kein Recycling erforderlich

2.worker:

StartServers 2 #Anzahl der Startprozesse

MaxClients 150 #Maximale Prozessanzahl der Anfragen

MinSpareThreads 25 #Mindestanzahl der Leerläufe Threads

MaxSpareThreads 75 #Maximale Anzahl inaktiver Threads

ThreadsPerChild 25 #Wie viele Threads können von jedem Prozess generiert werden, das Maximum kann 20.000 sein, die Leistung hängt eng zusammen

MaxRequestsPerChild 0 #Die maximale Anzahl der vom Thread verarbeiteten Anforderungen, 0 unbegrenzt

Die Gesamtzahl der Anforderungen, die gleichzeitig im Worker-Modus verarbeitet werden können, wird durch die Gesamtzahl bestimmt Anzahl der untergeordneten Prozesse multipliziert mit dem Threadsperchild-Wert, er sollte größer oder gleich maxclients sein. Wenn die Last sehr groß ist und die Anzahl der vorhandenen untergeordneten Prozesse nicht erfüllt werden kann, erzeugt der Steuerungsprozess neue untergeordnete Prozesse.

Tipp: Die standardmäßige maximale Gesamtzahl der untergeordneten Prozesse beträgt 16. Wenn Sie sie erhöhen müssen, müssen Sie den Wert von serverlimit klar deklarieren (der Maximalwert ist 20000).

Überprüfen Sie die Anzahl gleichzeitiger Verbindungen unter Apaches Workern:

[root@LAMP ~]# pstree -a|grep httpd|wc -l

84

[root@LAMP ~] #

3. Das Ereignis wird nicht untersucht

2. Testanalyse

Wichtige Punkte:

1, apachectl -M Überprüfen Sie, ob libphp5.so ist geladen

2 . Ist AddType Application/x-httpd-php .php

korrekt in httpd.conf geschrieben 3. Das PHP-Codeformat muss korrekt geschrieben sein

4. Selinux muss ausgeschaltet sein

5. Verweigern wurde nicht geändert, um 2.4 verweigert zuzulassen

Host wurde nicht hinzugefügt

2. Konfigurieren Sie den ersten virtuellen Host

Löschen Sie die Zeile vor dem httpd.conf-Warnsignal

#Include conf/extra/httpd-vhosts.conf

vim /usr/local/apache2/con5 für einen virtuellen Host

http ://www.lishiming.net/thread-554-1-1.htmlf/extra/httpd-vhosts.conf

2. Web-Anti-Hotlink-Technologie

Um es einfach auszudrücken: Einige illegale Websites rufen illegal Ressourcen von anderen Websites ohne Erlaubnis in ihren eigenen Website-Programmen auf und zeigen diese aufgerufenen Ressourcen dann auf ihren eigenen Websites an, um den auf ihren eigenen Websites angezeigten Inhalt zu füllen Dadurch wird der Netzwerkverkehr beim Aufrufen von Ressourcen-Websites verschwendet, was dazu führt, dass die Bandbreite und der Servicedruck anderer Websites knapp werden oder es sogar zu Ausfallzeiten kommt.

Lösung für Website-Hotlinking:

1. Hotlink-Verhinderung basierend auf http-Referer implementieren

Im HTTP-Protokoll gibt es ein Header-Feld namens Referer, das das URL-Format „To“ verwendet Geben Sie an, woher die Ressourcen stammen, die auf die aktuelle Webseite verweisen. Wenn es sich um eine Ressourcendatei handelt, kann sie die Webseitenadresse verfolgen, die sie anzeigt Quelle ist nicht diese Site, blockieren oder zurückgeben. Geben Sie die Seite an. Derzeit unterstützen Apache, Nginx und Lighttpd alle Anti-Hotlinking basierend auf http-Referer

2. Verarbeitung basierend auf Cookies

3. Anti-Hotlinking durch verschlüsselte Zugriffspfade ähnliches Plug-in mod_secdownload

Apache-Webdienst implementiert Hotlink-Prävention in der Praxis

ServerAdmin ucode@gmail.com

DocumentRoot „/var/html/bbs“

ServerName ucode.blog.51cto.com

ServerAlias ​​​​www.dummy-host.example.com

ErrorLog „logs /bbs-error_log"

CustomLog "|/usr/local/sbin/cronolog /app/logs/access_bbs_%Y%m%d.log" kombiniert

RewriteEngine On #Open anti- Blutegel

RewriteCond %{ HTTP_REFERER}!^http://ucode.blog.51cto.com/.*$ [NC]

RewriteCond %{HTTP_REFERER}!^http://ucode .blog.51cto.com/$ [NC ]

RewriteCond %{HTTP_REFERER}!^http://ucode.blog.51cto.com/.*$ [NC]

RewriteCond % {HTTP_REFERER}!^http://ucode .blog.51cto.com$ [NC]

RewriteCond .*.(gif|jpg|swf)$ http://ucode.blog.51cto.com/ img/nolink.jpg [ R,NC]

Wenn der fettgedruckte Teil oben erfüllt ist, wird Folgendes zurückgegeben: http://ucode.blog.51cto. com/img/nolink.jpgPicture

Listen 80##Der Standard-Listening-Port ist 80

PidFile /export/servers/apache2/logs/httpd.pid

LoadModule authn_file_module module/mod_authn_file.so##Geladenes Modul

Benutzeradministrator ##Die allgemeine Standardeinstellung ist admin

Gruppenadministrator ##Die allgemeine Standardeinstellung ist admin

DocumentRoot "/ export/servers/apache2/htdocs"##Legen Sie den Pfad Ihrer Projektdatei fest

ServerAdmin you@example.com ##Wenn der Server einen Fehler meldet, kehren Sie zum Client zurück und bitten Sie darum, den Administrator zu kontaktieren

ServerName localhost:80 ##Servername: Port

AddType application/x-httpd-php .php ermöglicht dem .php-Textdateiformat auch die Ausführung von PHP-Programmen.

1

Optionen FollowSymLinks

AllowOverride None

Auftrag verweigern, zulassen

Von allen zulassen

#Optionen: Konfigurieren Sie, welche Funktionen in einem bestimmten Verzeichnis verwendet werden:

#ExecCGI: Ausführung zulassen von CGI in diesem Verzeichnisskript.

#FollowSymLinks: Dateisystemen erlauben, symbolische Links in diesem Verzeichnis zu verwenden.

#Indexes: Wenn der Benutzer auf das Verzeichnis zugreift und die durch DirectoryIndex angegebene Homepage-Datei (z. B. #index.html) nicht finden kann, wird die Dateiliste im Verzeichnis an den Benutzer zurückgegeben.

#SymLinksIfOwnerMatch: Bei Verwendung symbolischer Links kann nur dann auf den symbolischen Link zugegriffen werden, wenn sein Dateieigentümer mit dem tatsächlichen Dateieigentümer identisch ist.

Includes ermöglicht serverseitige Includes.

IncludesNOEXEC ermöglicht serverseitige Includes, deaktiviert jedoch #exec-Befehle und #exec CGI. Es ist weiterhin möglich, virtuelle CGI-Skripte aus dem ScriptAliase-Verzeichnis einzuschließen.

Zum Beispiel ohne + und - Symbole:

Optionen Indizes FollowSymLinks

Options Includes

dann ist nur Includes auf /web/ eingestellt docs /spec-Verzeichnis.

Wenn jedoch die zweite Optionsdirektive die Symbole + und - verwendet:

Options Indexes FollowSymLinks

< ; /Directory>

Options +Includes -Indexes

Then There will FollowSymLinks und Includes müssen auf das Verzeichnis /web/docs/spec festgelegt sein.

#AllowOverride: Der Typ der Direktive, die in der .htaccess-Datei vorhanden sein darf (der Name der .htaccess-Datei kann geändert werden und ihr Dateiname wird durch die AccessFileName-Direktive bestimmt):

# Keine: Wenn „AllowOverride“ auf „Keine“ gesetzt ist. Suchen Sie in diesem Verzeichnis nicht nach .htaccess-Dateien (kann den Serveraufwand verringern).

#All: Alle Anweisungen können in .htaccess-Dateien verwendet werden.

Reihenfolge: Steuern Sie, welche der beiden Zugriffsregeln „Zulassen“ und „Verweigern“ beim Zugriff Vorrang hat:

Zulassen: Liste der Hosts, auf die zugegriffen werden darf (verfügbare Domänennamen oder Subnetze, zum Beispiel: Zulassen von). 192.168.0.0/ 16).

Verweigern: Liste der Hosts, denen der Zugriff verweigert wird.

Der Apache-Server kann eine Zugriffskontrolle für Verzeichnisse durchführen. Die eine besteht darin, sie für jedes Verzeichnis in der Einstellungsdatei httpd.conf (oder access.conf) festzulegen 🎜>Timeout 300 ##Das Timeout-Intervall zwischen dem Client-Programm und der Serververbindung

KeepAlive On ###Mehrere HTTP-Anfragen in einer Verbindung übertragen

MaxKeepAliveRequests 100 ###Kann durchgeführt werden für eine Verbindung Die maximale Anzahl von HTTP-Anfragen

KeepAliveTimeout 15 ### Testen Sie die Zeit zwischen mehreren Anforderungsübertragungen in einer Verbindung, wenn der Server eine Anforderung abgeschlossen, aber die nächste nicht vom Client-Programm erhalten hat. Nachdem das Intervall den durch diesen Parameter festgelegten Wert überschreitet, trennt der Server die Verbindung.

ErrorLog logs/error_log #Der Speicherort des Protokolls

LogLevel warn ##Debug-Protokollsektor auf Protokollebene, es gibt weitere Protokolle

Das Standardformat des Protokolls ist wie folgt Typ:

LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" kombiniert

LogFormat "%h %l %u %t "%r" %>s %b" common #common ist der Protokollformatname

LogFormat "%{Referer}i -> % U“ referer

LogFormat „%{User-agent}i“ agent

CustomLog logs/access_log common

Die Parameter im Format lauten wie folgt:

%h – IP-Adresse oder Hostname des Clients

%l -Dies ist die RFC 1413-Identität, die durch die Identität des Clients bestimmt wird. Das Symbol „-“ in der Ausgabe zeigt an, dass die Informationen hier ungültig sind.

%u – der vom HTTP-Authentifizierungssystem erhaltene Name des Clients, der auf die Webseite zugegriffen hat. Sie ist nur gültig, wenn eine Authentifizierung vorliegt. Das „-“-Symbol in der Ausgabe zeigt an, dass die Informationen hier ungültig sind.

%t – Der Zeitpunkt, zu dem der Server die Verarbeitung der Anfrage abgeschlossen hat.

„%r“ – Die Anführungszeichen sind der vom Kunden gesendete Anfrageinhalt, der viele nützliche Informationen enthält.

%>s – Dies ist der Statuscode, der vom Server an den Client zurückgegeben wird.

%b – Das letzte Element ist die Anzahl der an den Client zurückgegebenen Bytes ohne Antwortheader.

"%{Referer}i" – Dieses Element gibt an, von welcher Webseite die Anfrage gesendet wurde.

"%{User-Agent}i" – Bei diesem Element handelt es sich um die Browser-Identifikationsinformationen, die vom Browser des Kunden bereitgestellt werden

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
Vorheriger Artikel:Linux-EinbruchNächster Artikel:Linux-Einbruch