Zum Inhalt springen

mod_so

Aus Foxwiki
Die 5 zuletzt angesehenen Seiten:  Mktemp » netcat » mod_so


Apache-Modul mod_so

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

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

  1. https://httpd.apache.org/docs/2.4/mod/mod_so.html