mod_so
Apache-Modul mod_so
- Beschreibung: Laden von ausführbarem Code und Modulen in den Server beim Start oder Neustart
- Status: Erweiterung
- Modulkennung:so_module
- Quelldatei:mod_so.c
- Kompatibilität: Dies ist ein Basismodul (immer enthalten) unter Windows
Zusammenfassung
Auf ausgewählten Betriebssystemen kann dieses Modul verwendet werden, um Module zur Laufzeit über den Dynamic Shared Object (DSO)-Mechanismus in den Apache HTTP Server zu laden, anstatt eine Neukompilierung zu erfordern
Unter Unix stammt der geladene Code in der Regel aus gemeinsam genutzten Objektdateien (normalerweise mit der .so-Erweiterung), unter Windows kann dies entweder die .so- oder die .dll-Erweiterung sein
Warnung
Module, die für eine Hauptversion des Apache HTTP-Servers erstellt wurden, funktionieren in der Regel nicht mit einer anderen. (z. B. 1.3 vs. 2.0 oder 2.0 vs. 2.2)
- Zwischen den Hauptversionen gibt es in der Regel API-Änderungen, die eine Anpassung der Module erfordern, damit sie mit der neuen Version funktionieren
Themen
Anweisungen
Bugfix-Checkliste
Siehe auch
Erstellen ladbarer Module für Windows
Hinweis
Unter Windows, wo ladbare Dateien normalerweise die Dateierweiterung .dll haben, werden Apache-httpd-Module mod_whatever.so genannt, genau wie auf anderen Plattformen
- Es kann jedoch vorkommen, dass Sie auf Module von Drittanbietern stoßen, wie z. B. PHP, die weiterhin die .dll-Konvention verwenden
Obwohl mod_so Module immer noch mit ApacheModuleFoo.dll Namen lädt, wird die neue Namenskonvention bevorzugt
- Wenn Sie Ihr ladbares Modul für 2.0 konvertieren, passen Sie bitte den Namen an diese 2.0-Konvention an
Die Apache httpd-Modul-API ist in der Unix- und der Windows-Version unverändert
- Viele Module laufen unter Windows ohne oder mit nur geringen Änderungen gegenüber Unix, während andere auf Aspekten der Unix-Architektur basieren, die in Windows nicht vorhanden sind, und daher nicht funktionieren
Wenn ein Modul funktioniert, kann es dem Server auf eine von zwei Arten hinzugefügt werden
- Wie bei Unix kann es in den Server kompiliert werden
- Da Apache httpd für Windows nicht über das Configure-Programm von Apache httpd für Unix verfügt, muss die Quelldatei des Moduls zur ApacheCore-Projektdatei hinzugefügt werden und seine Symbole müssen zur os\win32\modules.c-Datei hinzugefügt werden
Die zweite Möglichkeit besteht darin, das Modul als DLL zu kompilieren, eine gemeinsam genutzte Bibliothek, die zur Laufzeit mithilfe der LoadModule-Anweisung in den Server geladen werden kann
- Diese Modul-DLLs können auf jeder Apache-httpd-für-Windows-Installation verteilt und ausgeführt werden, ohne dass der Server neu kompiliert werden muss
Um eine Modul-DLL zu erstellen, ist eine kleine Änderung an der Quelldatei des Moduls erforderlich: Der Modul-Datensatz muss aus der DLL exportiert werden (die später erstellt wird; siehe unten)
- Fügen Sie dazu AP_MODULE_DECLARE_DATA (definiert in den Apache-httpd-Header-Dateien) zur Modul-Record-Definition Ihres Moduls hinzu
- Wenn Ihr Modul beispielsweise Folgendes enthält:
module foo_module;
Ersetzen Sie das oben Genannte durch:
module AP_MODULE_DECLARE_DATA foo_module;
Beachten Sie, dass dies nur unter Windows aktiviert wird, sodass das Modul bei Bedarf unverändert unter Unix verwendet werden kann
- Wenn Sie mit .DEF-Dateien vertraut sind, können Sie den Moduldatensatz stattdessen mit dieser Methode exportieren
Erstellen Sie nun eine DLL, die Ihr Modul enthält
- Sie müssen diese mit der Exportbibliothek libhttpd.lib verknüpfen, die erstellt wird, wenn die gemeinsam genutzte Bibliothek libhttpd.dll kompiliert wird
- Möglicherweise müssen Sie auch die Compilereinstellungen ändern, um sicherzustellen, dass die Apache-httpd-Header-Dateien korrekt lokalisiert werden
- Sie finden diese Bibliothek im Verzeichnis modules Ihres Serverstamms
- Am besten nehmen Sie eine vorhandene .dsp-Moduldatei aus dem Verzeichnisbaum, um sicherzustellen, dass die Build-Umgebung richtig konfiguriert ist, oder vergleichen Sie alternativ die Compiler- und Link-Optionen mit Ihrer .dsp-Datei
Dadurch sollte eine DLL-Version Ihres Moduls erstellt werden
- Legen Sie diese nun einfach im Verzeichnis modules Ihres Serverstamms ab und verwenden Sie die LoadModule-Anweisung, um sie zu laden
LoadFile-Anweisung
- Beschreibung: Verknüpfung in der benannten Objektdatei oder Bibliothek
- Syntax:LoadFile Dateiname[Dateiname] ...
- Kontext:Serverkonfiguration, virtueller Host
- Status:Erweiterung
- Modul:mod_so
Die LoadFile-Anweisung verknüpft die benannten Objektdateien oder Bibliotheken, wenn der Server gestartet oder neu gestartet wird
- Dies wird verwendet, um zusätzlichen Code zu laden, der möglicherweise erforderlich ist, damit ein Modul funktioniert. Dateiname ist entweder ein absoluter Pfad oder relativ zu ServerRoot
- Beispiel
LoadFile „libexec/libxmlparse.so“
LoadModule-Anweisung
- Beschreibung: Verknüpft die Objektdatei oder Bibliothek und fügt sie der Liste der aktiven Module hinzu
- Syntax:LoadModule Modul Dateiname
- Kontext:Serverkonfiguration, virtueller Host
- Status:Erweiterung
- Modul:mod_so
Die LoadModule-Direktive verlinkt die Objektdatei oder Bibliothek filename und fügt die Modulstruktur mit dem Namen module zur Liste der aktiven Module hinzu. Module ist der Name der externen Variablen vom Typ module in der Datei und wird in der Moduldokumentation als Module Identifier aufgeführt
- Beispiel
LoadModule status_module „modules/mod_status.so“
lädt das genannte Modul aus dem Unterverzeichnis modules von ServerRoot