PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Lighttpd & PHP5 und MySQL Unterstützung (Debian)


Thunder™
11.05.2015, 19:25
Ein kleines HowTo wie man Lighttpd & PHP5 inkl. MySQL Unterstürzung auf einen Debian Server installiert.

Hier gibt es schon eine ähnliche Anleitung, diese ist allerdings ziemlich schwammig und schlampig formuliert.

Lighttpd ist ein Webserver der weit weniger Ressourcen benötigt als z.B. der Apache und ist so vor allem für sehr
große Lasten oder sehr schwache Systeme gut geeignet. FastCGI ermöglicht beispielsweise das Ausführen von PHP Code.
SCGI ergänzt Lighty um Ruby oder auch Python. Wir beschäftigen uns aber nur mit FastCGI, MYSQL und die Grundeinrichtung von Lighty.

Lighttpd ist als Debian Paket verfügbar, daher können wir es wie folgt installieren:
apt-get install lighttpdRichte Deinen Browser auf http://ip/ aus, nach dem Installieren müsstest die Lighttpd Platzhalter Seite sehen:

http://info-panel.net//test/upload/5988648198photo-6-d80fc657.png

Lighttpd’s Standard Document Root ist /var/www , die Konfigurationsdatei ist /etc/lighttpd/lighttpd.conf.

Wir können nun PHP5 in Lighttpd durch FastCGI wirksam werden lassen.
Glücklicherweise bietet Debian ein FastCGI-aktiviertes PHP5 Paket, welches wir wie folgt installieren:
apt-get install php5-cgi
Um PHP5 in Lighttpd zu aktivieren, müssen wir php.ini (/etc/php5/cgi/php.ini) anpassen.
vi /etc/php5/cgi/php.inicgi.fix_pathinfo = 1 # ; <-- entfernenDann öffnen wir /etc/lighttpd/lighttpd.conf und fügen “mod_fastcgi”, zur server.modules hinzu:
server.modules = (
"mod_access",
"mod_auth",
"mod_fastcgi", # <--- hinzufügen
"mod_alias",
"mod_accesslog",
"mod_compress",
"mod_evasive",
"mod_expire"
)dann ganz am Ende der Zeile fügen wir folgende Zeile hinzu:
fastcgi.server = ( ".php" => ((
"bin-path" => "/usr/bin/php5-cgi",
"socket" => "/tmp/php.socket" + var.PID,
)))danach starten wir Lighttpd neu:
/etc/init.d/lighttpd restart
Wir werden jetzt eine kleine PHP Datei (info.php) in diesem Verzeichnis erstellen und es in einem Browser aufrufen.
Die Datei wird viele nützliche Informationen über die PHP Installation anzeigen wie zum Beispiel die installierte PHP Version.
vi /var/www/info.phpin die info.php kommt:
<?php
phpinfo();
?>
Nun rufen wir diese Datei (http://ip/info.php) in einem Browser auf :
http://info-panel.net//test/upload/7865656079photo-7-120316cb.png

Es läuft PHP5 über FastCGI, wie man in der Server API Zeile sehen kann. Wenn Du weiter nach unten scrollst, siehst Du alle Module,
die bereits in PHP5 aktiviert sind. MySQL ist dort nicht aufgelistet, was bedeutet, dass wir noch keine PHP5 Unterstützung haben.

Weiter geht es mit dem MySQL-Server und Phpmyadmin
apt-get install mysql-server phpmyadminEs wird das Passwort für Root unter MySQL5 abgefragt:
http://info-panel.net//test/upload/5131052723photo-4-de28d1d0.jpg

und es wird gefragt welcher Webserver für MySQL5 konfiguriert werden soll (wir wollen lighttpd ):
http://info-panel.net//test/upload/7357761110photo-5-1cec9010.jpg

Um MySQL Unterstützung in PHP zu beziehen, können wir das php5-mysql Paket installieren.
Es ist ganz gut noch andere PHP5 Module zu installieren, da Du diese für Deine Projekte evt benötigen könntest.

So kannst Du nach verfügbaren PHP5 Modulen suchen:
apt-cache search php5Wähle diejenigen aus, die Du brauchst und installiere sie wie folgt:
apt-get install php5 php5-mysql php5-curl php5-gd php5-idn php5-imagick php5-imap php5-mcrypt php5-memcache php5-xcache Bei den meisten verschwindet phpmyadmin im /usr/share/phpmyadmin/. verzeichnis..
damit wir diese im /var/www/ aufrufen können geben wir folgendes ein...
cd /var/wwwln -s /usr/share/phpmyadmin /var/www/phpmyadmin
Starte Lighttpd jetzt neu:
/etc/init.d/lighttpd restartÖffne nun (http://ip/info.php) in Deinen Browser und scroll runter zur Modulsektion.
Du solltest dort viele neue Module finden, das MySQL Modul eingeschlossen:
http://info-panel.net//test/upload/7141323923photo-8-5aa365f6.png

Nach dem alles läuft, könnt ihr die info.php wieder löschen und die Basis Installation von Lighttpd ist abgeschlossen.

Wer möchte liest weiter und kümmert sich etwas um die Sicherheit seines Webservers. Hier ein paar Tipps.
Ich gehe nicht auf jede einzelne Funktion ein, das würde den Thread mehr als sprengen, später kann ich aber gerne einen
separaten Thread dafür erstellen, wo ich jedes einzelne PHP Modul beschreibe und drauf eingehe sofern gewünscht.

Fangen wir mit der php.ini an (/etc/php5/cgi/php.ini) und ändern:

expose_php = On <--- auf Off setzen!session.hash_function = 0 <--- auf 1 ändern!session.hash_bits_per_character = 4 <--- auf 6 ändern!
suche
disable_functionsund verbiete was du nicht brauchst:
disable_functions = exec, system, passthru, shell_exec, escapeshellcmd, proc_open, proc_nice, ini_restore, popen, rename, chgrp, chown, highlight_file, show_source, chmod, phpinfoAchtung, durch das Deaktivieren einiger Funktionen kann es zu Problemen bei euren Projekten kommen
(Tracker-Stats Anzeige etc, aber das kann man alles wieder gut machen wenn man php beherrscht.)

Nun gehen wir nach /etc/lighttpd/ und legen in lighttpd.conf einen Verzeichnisschutz an:
nano /etc/lighttpd/lighttpd.conf Und prüfen, ob mod_auth auch mitgeladen wird. Sollte mod_auth unter server.modules nicht dabei sein, so tragt dies bitte nach.
server.modules = (
"mod_access",
"mod_auth", # <--- hinzufügen
"mod_alias",
"mod_accesslog",
"mod_fastcgi",
"mod_compress",
"mod_evasive",
"mod_expire"
)
Wollt ihr nur ein Verzeichnis schützen, so genügt folgende Konfiguration:

Beispiel PHPmyadmin in /var/www/

$HTTP["host"] =~ "" {
auth.backend = "htpasswd"
auth.backend.htpasswd.userfile = "/etc/lighttpd/passwd"
auth.require = (
"/phpmyadmin" => ("method" => "basic", "realm" => "Anmelden", "require" => "valid-user")
)
}Mehrere Verzeichnisse oder Dateien lassen sich ganz einfach hinzufügen. Dies sehe dann so aus:
$HTTP["host"] =~ "" {
auth.backend = "htpasswd"
auth.backend.htpasswd.userfile = "/etc/lighttpd/passwd"
auth.require = (
"/phpmyadmin" => ("method" => "basic", "realm" => "Anmelden", "require" => "valid-user"),
"/admin.php" => ("method" => "basic", "realm" => "Anmelden", "require" => "valid-user"),
"/bilder" => ("method" => "basic", "realm" => "Anmelden", "require" => "valid-user")
)
}Nun legen wir noch die entsprechende Datei an, welche den erlaubten Namen und Passwort beinhaltet.
Die Datei kann natürlich auch anders heißen. Dazu muss die obere Konfiguration dann angepasst werden.
nano /etc/lighttpd/passwdUm den entsprechenden Inhalt zu erstellen, empfehle ich einen .htaccess Generator (http://all-inkl.com/wichtig/htaccessgenerator/).
Dort einfach nur User- und Passwortliste ausfüllen und den generierten Inhalt für die .htpasswd in
unsere passwd Datei einfügen. Nun noch die lighttpd Konfigurationsdatei neuladen:
/etc/init.d/lighttpd reloadOk jetzt haben wir schon ein gutes Stück geschafft aber da geht noch was....Sichern wir unser Werbserver jetzt mit SSL ab.

Erstelle ein Eigenes SSL Zertifikat

cd /etc/lighttpd/openssl req -new -x509 -keyout lighttpd.pem -out lighttpd.pem -days 365 -nodeschmod 400 /etc/lighttpd/lighttpd.pemöffne die lighttpd.conf und mache https startklar.

$SERVER["socket"] == ":443" {
ssl.engine = "enable"
ssl.cipher-list = "TLSv1+HIGH !SSLv2 RC4+MEDIUM !aNULL !eNULL !3DES @STRENGTH"
ssl.pemfile = "/etc/lighttpd/lighttpd.pem"
}
Den ssl.cipher-list könnt ihr individuell anpassen: Für weitere Infos einfach HIER (http://redmine.lighttpd.net/projects/1/wiki/docs_ssl)klicken.

jetzt leiten wir alles von Port 80 (http) auf 443 (https)
$SERVER["socket"] == ":80" {
$HTTP["host"] =~ "(.*)" {
url.redirect = ( "^/(.*)" => "https://%1/$1" )
}
}Da wir die lighttpd.conf bereits geöffnet haben, ändern wir auch hier ein paar Kleinigkeiten.

Füge recht weit mittig das hier ein
evasive.max-conns-per-ip = 50
und Kontrolliere die Zugriffe pro IP die Minute.

404 Page
server.error-handler-404 = "/404.php"
Setze einen Server-Tag:
server.tag = "My-Webserver"
Verbiete Server Dir Listing:
server.dir-listing = "disable"Jetzt fehlt uns nur noch die Domain, dazu fügt ihr folgendes in eure lighttpd.conf

$HTTP["host"] =~ "domain.com" {
server.document-root = "/home/domain.com"
server.error-handler-404 = "/404.php"
server.errorlog = "/var/log/lighttpd/domain.error.log"
accesslog.filename = "/var/log/lighttpd/domain.access.log"
url.access-deny = ( "~", ".inc", ".htaccess", ".htpasswd" )
}Erstellt nun in /home/ euren Ordner und passt die chmod rechte an
chmod 445 /home/domainHier noch ein Beispiel wie man den Verzeichnisschutz auf einer Domain anwendet.

$HTTP["host"] =~ "domain.com" {
server.document-root = "/home/domain.com"
server.error-handler-404 = "/404.php"
server.errorlog = "/var/log/lighttpd/domain.error.log"
accesslog.filename = "/var/log/lighttpd/domain.access.log"
url.access-deny = ( "~", ".inc", ".htaccess", ".htpasswd" )

auth.backend = "htpasswd"
auth.backend.htpasswd.userfile = "/etc/lighttpd/passwd"
auth.require = (
"/admin" => ("method" => "basic", "realm" => "Anmelden", "require" => "valid-user"),
"/include/" => ("method" => "basic", "realm" => "Anmelden", "require" => "valid-user")
)
}Leider hat man öfters Probleme mit fremden Domains das diese vom Vorbesitzer nicht geändert wurden und die IP immer noch auf unseren Server verweist. Hier für gibt es es eine kleine nette Zeile um solche Domains umzuleiten. Mein ehemaliger IP Besitzer hatte ein Board wo sich nur BMW Fans getroffen haben, leider hat der Domain Inhaber aber die Domain nicht umgeschwenkt und ich hab sie alle nach Mercedes geschickt :pappnase:
Hier ein Beispiel:

Modul aktivieren:
"mod_redirect"$HTTP["host"] =~ "^www.bmw\.de$" {
url.redirect = ( "^/(.*)" => "http://www.mercedes-benz.de//$1")
}BMW kommt und wird weiter nach Mercedes geleitet, das ganze kann man auch für seine eignen Domains anwenden.

Zum Schluss noch eine schöne aufgeräumte lighttpd.conf

Bitte nicht vergessen eure Pfade anzupassen, diese werden von eurem abweichen!

#####################################
# Lighttpd Config by Thunder #
#####################################
# Aktivierte Server Module
server.modules = (
"mod_access",
"mod_auth",
"mod_alias",
"mod_accesslog",
"mod_fastcgi",
"mod_compress",
"mod_evasive",
"mod_expire",
"mod_rewrite",
"mod_redirect"
)

# Server Zugriffe (Tuning)
evasive.max-conns-per-ip = 50
server.network-backend = "linux-sendfile"

# Port: Normal 80,443
server.port = 80

# Host Verzeichnis
server.document-root = "/var/www/"
server.pid-file = "/var/run/lighttpd.pid"

# Server Error Logs
server.errorlog = "/var/log/lighttpd/www.error.log"
accesslog.filename = "/var/log/lighttpd/www.access.log"

# Upload Pfad
server.upload-dirs = ( "/etc/lighttpd/temp" )

# 404 Page
server.error-handler-404 = "/404.php"

# Groub & User
server.username = "www-data"
server.groupname = "www-data"

# Server Tag..
server.tag = "Möp"

# Verzeichnis Inhalt enable / disable
server.dir-listing = "disable"

# virtual directory listings
dir-listing.encoding = "iso-8859-1"
# dir-listing.encoding = "utf-8"

# .htaccess und .htpasswd - php, html, fcgi..
url.access-deny = ( "~", ".inc", ".htaccess", ".htpasswd" )
index-file.names = ( "index.php", "index.html", "index.htm" )
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )

# SSL Support
# SSL Socket
$SERVER["socket"] == ":443" {
ssl.engine = "enable"
ssl.cipher-list = "TLSv1+HIGH !SSLv2 RC4+MEDIUM !aNULL !eNULL !3DES @STRENGTH"
ssl.pemfile = "/etc/lighttpd/lighttpd.pem"
}

# Alles Umleiten zu https
$SERVER["socket"] == ":80" {
$HTTP["host"] =~ "(.*)" {
url.redirect = ( "^/(.*)" => "https://%1/$1" )
}
}

# Konfiguration phpmyadmin
$HTTP["host"] =~ "" {
auth.backend = "htpasswd"
auth.backend.htpasswd.userfile = "/etc/lighttpd/passwd"
auth.require = (
"/phpmyadmin" => ("method" => "basic", "realm" => "Anmelden", "require" => "valid-user")
)
}

# domain.de
$HTTP["host"] =~ "domain.de" {
server.document-root = "/home/domain.de"
server.error-handler-404 = "/404.php"
server.errorlog = "/var/log/lighttpd/domain.error.log"
accesslog.filename = "/var/log/lighttpd/domain.access.log"
url.access-deny = ( "~", ".inc", ".htaccess", ".htpasswd" )
}

# compress module
compress.cache-dir = "/etc/lighttpd/temp/"
compress.filetype = (
"text/plain",
"text/html",
"text/xml",
"text/css",
"text/javascript",
"application/xml",
"application/xhtml+xml",
"application/rss+xml",
"application/javascript",
"application/x-javascript"
)

## Debug wenn 1
fastcgi.debug = 0

# FastCgi Server Config
fastcgi.server = ( ".php" => ((
"bin-path" => "/usr/bin/php5-cgi",
"socket" => "/tmp/php.socket" + var.PID,
)))

# default listening port for IPv6 falls back to the IPv4 port
include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port

#liest die mime types /etc/mime.types aus
include_shell "/usr/share/lighttpd/create-mime.assign.pl"

# laedt die Configs unter /etc/lighttpd/conf-enabled/*.conf
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"

Ok, dann wollen wir mal hoffen das ich nichts vergessen habe und ihr mit dieser Anleitung zurecht kommt.
Haut euren Apache in den Müll und Testet lighttpd ruhig einmal, als Reserve Proxy ist er auch super einsetzbar.

Rechtschreibfehler unterliegen der künstlerischen Freiheit!

Peace.

Thunder™
11.05.2015, 20:50
Hier noch ein kleiner Zusatz, weil mich einer drauf angesprochen hat.

Wenn ihr MYSQL Initialisiert, schaut in /etc/mysql/my.cnf ob mysql auch wirklich nur Local lauscht.
Eigentlich sollte es Standard so sein aber wenn das nicht so sein sollte bei euch, dann schreibt das noch mit rein.

bind-address = 127.0.0.1

danach mysql neu starten.

service mysql restart

Überprüfen:
netstat -lnptu

Eigentlich könnt ihr auch gleich mal den Port ändern etc aber das kauen wir heute nicht mehr durch.

Lex
11.05.2015, 23:28
Hab die Anleitung nur überflogen aber ich finde die Konfiguration der vhosts und lighttpd verdammt umständlich und
kompliziert. Von der Syntax her. Abgesehen davon, dass Nginx der schnellste der aktuellen Webserver ist.
Schneller als der fette Indianer (Apache 2) zu sein ist da keine Kunst mehr.

Ansonsten finde ich es eine sehr gelungene und brauchbare Anleitung für jedermann, saubere Arbeit!

Lg Lex

Cerberus
12.05.2015, 07:02
ich denke, wir sollten das in unser Glossary überführen :)
Hier könnte es irgend wann "unter" gehen

Stifler
12.05.2015, 11:21
Also ich finde Apache 2.4 recht passabel!