Apache WebServer
« Vorherige BeiträgeVirtualMin: PHP Prozesse automatisch beenden (zu viele PHP Prozesse)
Samstag, 07.08.2010Wenn Sie mit VirtualMin Ihren Server (evtl. virtuellen Server = VServer) verwalten, dann stehen Sie manchmal vor dem einfachen (aber relativ gefährlichen) Problem, dass Ihnen die PHP Prozesse Ihren verfügbaren Arbeitsspeicher (RAM) füllen. Zwar ist die Speicherverwaltung von Debian Linux darauf ausgelegt, benutzten Speicher nicht sofort wieder freizugeben, sondern dieses erst bei Bedarf zu machen. Trotzdem kann dieses Verhalten Ihren Server in Performanceprobleme bringen oder Zugriffe scheitern lassen (Error 503 – “Service unavailable”).
Eine Lösung ist, in der VirtualMin Oberfläche die Einstellungen anzupassen:
- System Settings > Server Templates
- “Default Settings” anklicken
Nutzen Sie für Ihre Server ein eigenes Template, nutzen Sie jenes - Edit template section = “Apache website”
- Setzen Sie “Default FCGId PHP sub-processes” auf “None”
- Klicken Sie ganz unten auf “Save”
- Starten Sie den Apache Webserver einmal neu
- Wechseln Sie in den WebMin Bereich (oben links im Bildschirm)
- Servers > Apache Webserver
- Klicken Sie auf “Apply Changes” (oben rechts im Bildschirm)
- Fertig
Nun werden nicht mehr benötigte PHP Prozesse sofort nach Ihrem Ablauf auch entfernt und es steht wieder mehr Server-RAM zur Verfügung.
SVN: Nach einem Commit automatisch die Webseite aktualisieren (Post-Commit Hook)
Freitag, 23.07.2010Bei SVN Projekten werden die Änderungen der Entwickler & Programmierer regelmäßig von deren lokaler Kopie in das entsprechende SVN Repository committed (= gesichert / gespeichert).
Bei diesem “Committen” können Sie Ihren SVN Server anweisen, sofort die Änderungen auf einen WebServer zu kopieren und dadurch stets die aktuellste Version zum Testen vorzuhalten.
Zuerst müssen Sie die Grundlage für spätere Updates schaffen … einen grundlegenden Export des aktuelles Repositories:
svn export http://yourDomain.com/svn/YourProject /path/to/webserver/
Wenn das WebServer verzeichnis (hier: “/path/to/webserver/”) bereits existiert und jetzt für den Export überschrieben werden soll, dann müssen die die Option “–force” an den Befehl anhängen:
svn export http://yourDomain.com/svn/YourProject /path/to/webserver/ --force
Nun richten Sie die Update-Automatik ein:
- Dafür gehen Sie in das “hooks” Verzeichnis Ihres Projektes auf dem SVN Server
- Kopieren Sie sich die Vorlage für den “post-commit” Hook:
cp post-commit.tmpl post-commit
- Bearbeiten Sie die Datei “post-commit”
nano post-commit
- Fügen Sie folgende Befehle ein:
1 2
cd /path/to/webserver/ svnlook dirs-changed [REPOS] -r [REV] | xargs /usr/bin/svn up -N
Hinweis:
Dieses Vorgehen ist (meist) nur für lokale Produktions- und Test-Webserver zu empfehlen. Bei Live-Systemen können auch kleine Fehler in der Entwicklung zu fatalen Problemen führen, da diese sofort online für jeden Besucher sichtbar wären.
PHP: Apache2 Version in Variable auslesen
Mittwoch, 21.07.2010Damit Sie auf einem Unix (Linux) System einfach die aktuelle Version des Apache WebServers herausfinden können, zeigen wir Ihnen ein PHP-Beispiel.
In dem PHP Script wird die Apache-Funktion “apache2ctl” genutzt, die die aktuelle Apache-Version auszulesen. Dieser Befehl wird mithilfe des PHP Befehles “passthru()” direkt an das Linuxsystem weitergegeben.
Hinweis:
Häufig ist auf “öffentlichen” Webservern aus Sicherheitsgründen die Nutzung einiger Befehle gesperrt. Dazu zählt häufig auch der Befehl “passthru()”. Wenn das Script bei Ihnen lokal auf dem Computer also einwadnfrei läuft und auf Ihrem Internetserver keine Daten zurück gibt, liegt diese Befehlssperre vor. Eine Möglichkeit, diese Sperre aufzuheben hat nur Ihr Web-Administrator (oder Provider).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php // PHP Version auslesen ob_start(); passthru("apache2ctl -v"); $ver = ob_get_contents(); if empty($ver) echo "passthru() disabled ?"; ob_end_clean(); $a = explode("\n", $ver); preg_match('/(server version: ){1}(.*)/i', $a[0], $v); $data[0] = $v[2]; preg_match('/(server built: ){1}(.*)/i', $a[1], $v); $data[1] = date("d.m.Y H:i:s", strtotime($v[2])); print_r($data); ?> |
Apache: Verzeichnisse mit Passwort schützen (htpasswd)
Dienstag, 20.07.2010Mit dem Apache Webserver wird ein Hilfsprogramm ausgeliefert: htpasswd
Es ermöglicht Ihnen die einfache Erstellung von Passwortdateien. Am einfachsten ist es über die Kommandozeile zu bedienen. Mit dem Aufruf “htpasswd -h” erhalten Sie eine kurze Hilfe und Syntax.
Beispiel:
htpasswd -c .htusers peter
Durch diesen Befehl wird eine neue Passwortdatei angelegt. Dabei müssen Sie für den neuen Benutzer “peter” ein Passwort angeben und (durch eine wiederholte Eingabe) bestätigen.
Kopieren Sie die neu erstellte Datei in das vorgesehene, zu schützende Verzeichnis auf Ihrem Internetserver (WebServer).
Linux: Fatal error: Call to undefined function imap_open()
Freitag, 07.05.2010Wenn Sie beispielsweise nach der Installation des Webmailprogrammes “Horde” die folgende Meldung angezeigt bekommen, kann Ihnen dieser Artikel helfen:
Fatal error: Call to undefined function imap_open()
Grund für die Meldung ist die fehlende IMAP Unterstützung in PHP. In diesem Artikel erkläre ich die Lösung für Linux Debian lenny (V5). Andere Systeme benötigen teilweise einen kompletten Neubau von PHP (= Neucompilierung / Recompiling).
Zuerst muss das fehlende Paket instelliert werden:
apt-get install php5-imap
Ihnen werden Details angezeig und am Ende werden Sie gefragt:
Do you want to continue? [Y/n/?]
Hier antworten Sie bitte mit “y”.
Die automatische Installation beginnt und kann einen kurzen Moment brauchen.
Wichtig ist, dass Sie danach Ihren Apache Webserver mit einem der beiden folgenden Befehle neu starten:
apache2ctl graceful /usr/sbin/apache2ctl graceful
Fertig.
Beim Einsatz von Horde haben wir teilweise die Cookies im Browser löschen müssen. Außerdem half häufig auch das Umsetzen der Cookie-Verarbeitung. Weitere Details finden Sie in unserem Artikel “Horde: Nach dem erfolgreichen Login wird wieder der Login angezeigt“.
Horde: Trotz Sprache “Deutsch” wird alles in Englisch angezeigt
Mittwoch, 05.05.2010Auch wenn Sie beim Webmailer “Horde” als gewünschte Sprache “Deutsch” ausgewählt haben, wird Ihnen alles auf Englisch angezeigt. Das liegt an den fehlenden “locales” für die gewäschte Sprache.
Diese können Sie wie folgt installieren (am Beispiel von Linux Debian lenny).
Geben Sie auf der Shell (SSH / PuTTy) folgenden Befehl ein:
dpkg-reconfigure locales
Wählen Sie dann zusätzlich die beiden folgenden Einträge aus:
“de_DE ISO-8859-1″ (recht weit unten)
“de_DE”
Danach müssen Sie nurnoch Ihren Apache Webserver neu starten:
/etc/init.d/apache2 restart
Nun sollte Ihre Anzeige auch auf Deutsch erscheinen.
Apache: Reverse Proxy & Multi Subdomains
Sonntag, 14.02.2010Wenn Sie einen Apache2 Webserver als Reverse Proxy betreiben und dabei mehrere Subdomains berücksichtigen möchten, müssen Sie nicht zwangsläufig mehrere virtuellen Hosts (VHosts) in der Apache Konfiguration definieren. Es geht wesentlich einfacher über Parameter in der Konfiguration:
Fügen Sie am Ende der Datei die folgenden beiden Zeilen ein:
ProxyRequests on
ProxyPreserveHost on
Starten Sie anschließend den Apache durch “/etc/init.d/apache2 restart” neu. Fertig.
Wenn Sie WebMin für die Administration nutzen, können Sie die Einstellung auch bequem über die Weboberfläche durchführen:
- Server
- Apache Webserver
- Den entsprechenden virtuellen Server auswählen
- Proxying
- “Erhalte originalen Host:-Header” auf “Ja” setzen
- Oben rechts auf “Änderungen anwenden” klicken
PHP: Unable to load dynamic library ‘/usr/lib/php5/extensions/mysql.so’
Freitag, 05.02.2010Wenn im ErrorLog des Apache2 WebServers (“tail /var/log/apache2/error.log”) u.a. folgende Zeile zu finden ist, kann PHP die Extension (Erweiterung) nicht finden und laden:
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/extensions/mysql.so' - /usr/lib/php5/extensions/mysql.so: cannot open shared object file: No such file or directory in Unknown on line 0
Häufig wird dann angefangen, wild an der Konfiguration zu ändern und basteln. Dabei wird meist das naheliegendste übersehen:
Gibt es das angegebene Verzeichnis überhaupt ?
Erst recht, wenn mehrere (oder gar viele) Extensions nicht geladen werden können.
Wenn dann der Befehl
dir -l /usr/lib/php5/extensions/
die folgende Fehlermeldung anzeigt, sollte alles klar sein:
dir: Zugriff auf /usr/lib/php5/extensions/ nicht möglich: Datei oder Verzeichnis nicht gefunden
Lösung
Den Pfad für die Extensions in der “php.ini” anpassen. Diese kann, falls der Pfad nicht bekannt ist, mithilfe des folgenden Befehls gefunden werden.
find / -name php.ini
Dieser Befehl zeigt Ihnen ggf. auch andere “php.ini” Dateien auf ihrem System an. Manchmal konfiguriert man ein einer “php.ini” und wundert sich, dass keine Änderung eintritt. Wenn man zufällig die falsche Datei in den Händen hat, dann kann man auch lange auf ein Ergebnis warten
Häufig fällt dieses Problem nach einer (Neu)Installation erst auf, wenn die mySQL / mySQLi Unterstützung fehlt. Grund ist dann (meist), dass die mysql.so Extension in PHP nicht geladen werden kann.
Apache2 – Variable “SERVER_SOFTWARE” setzen
Freitag, 05.02.2010Um im Apache2 die Umgebungsvariable “SERVER_SOFTWARE” zu beeinflussen, nutzen Sie einfach die Konfiguration des Apache WebServers:
Z.Bsp. in Debian Linux lenny4:
Unter “/etc/apache2/conf.d/security” die Zeile beginnend mit “ServerTokens” finden und entsprechend anpassen.
- ServerTokens Prod
Der Server sendet “Server: Apache” - ServerTokens Major
Der Server sendet “Server: Apache/2″ - ServerTokens Minor
Der Server sendet “Server: Apache/2.0″ - ServerTokens Min
Der Server sendet “Server: Apache/2.0.41″ - ServerTokens OS
Der Server sendet “Server: Apache/2.0.41 (Unix)” - ServerTokens Full (oder nicht angegeben)
Der Server sendet “Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2″
Die gesendeten Texte sind nur Beispiele.
Mehr Infos unter apache.org/docs/2.2/mod/core.html#servertokens
Sicherheit: Alle Dateien auf dem Server löschen (bzw. Rechte setzen)
Mittwoch, 04.11.2009Wenn Sie eine Webseite oder Scripte auf einem Server betreiben, verwalten Sie diese meist mit einem FTP Client (FileZilla, ws_ftp, etc.).
Beim Löschen von Dateien vom Server tritt manchmal das Problem auf, dass Sie Dateien nicht (mehr) mit Ihrem FTP Programm löschen können, da Ihnen dafür die Berechtigung fehlt:
550 <filename>: Permission denied
Grund des Problemes ist, dass z.Bsp. ein PHP Script, ein Module, Plugin, o.ä. diese Datei erstellt hat. Dabei wird diese Datei jedoch für den entsprechenden User erstellt (was im Grunde auch vollkommen richtig ist!). Dieser ist bei Unix/Linux Server meist “wwwrun” und stellt den Apache-User dar.
Sie nutzen durch Ihren FTP Zugang jedoch Ihren eigenen Benutzernamen (z.Bsp. “web123″) und haben daher (natürlich) nicht das Recht, die Datei des “wwwrun” Benutzers zu löschen.
Lösung:
Das folgende PHP Script setzt den Eigentümer (Benutzer) aller Dateien und Verzeichnisse wieder auf einen von Ihnen angegebenen Benutzer.
Dadurch kann entweder das Script direkt oder Sie per FTP Software wieder die Dateien und Verzeichnisse löschen.
Wenn Sie z.Bsp. als Webseitenroot (Hauptverzeichnis) “/srv/www/virtual/web123/htdocs” haben, werden alle Inhalte in diesem Verzeichnis gelöscht. Der restliche Server, andere Verzeichnisse usw. werden nicht berührt.
Download:
Bevor Sie dieses PHP Script einsetzen, informieren Sie sich bitte gründlich über dessen Wirkung !
Sollten Sie keine tieferen Kenntnisse in der Serveradministration/-verwaltung haben, fragen Sie bitte Ihren Administrator oder einen IT Fachmann. Bitte vertrauen Sie nicht auf den Tipp Ihres Kollegen, der “ein wenig Ahnung” von der EDV hat. Diese Scripte löschen komplette Verzeichnisse ohne Sicherung und Rückfrage !
[page_download category="0"]
Gewähr, Haftung:
Wir übernehmen für dieses Tool keine Gewähr und Haftung. Es soll Ihnen eine technische Möglichkeit aufzeigen und Ihnen bei Berechntigungsproblemen eine zusätzliche lösungsmöglichkeit aufzeigen. Aus diesem Grund ist eine (sh. oben) Ausführungssperre eingebaut. Diese muss vor Nutzung deaktiviert werden.
Überlassen Sie daher die Anwendung und Nutzung dieses Scriptes ausschließlich einem IT Fachmann!
Bei unsachgemäßer Anwendung erfolgt teilweiser oder kompletter Datenverlust!