NetVision-Technik

NetVision-Technik (http://www.netvision-technik.de/forum/index.php)
-   Webserver (http://www.netvision-technik.de/forum/forumdisplay.php?f=9)
-   -   Lighttpd & PHP5 und MySQL Unterstützung (Debian) (http://www.netvision-technik.de/forum/showthread.php?t=7445)

Thunder™ 11.05.2015 18:25

Lighttpd & PHP5 und MySQL Unterstützung (Debian)
 
Liste der Anh?nge anzeigen (Anzahl: 1)
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:
Code:

apt-get install lighttpd
Richte Deinen Browser auf http://ip/ aus, nach dem Installieren müsstest die Lighttpd Platzhalter Seite sehen:

http://info-panel.net//test/upload/5...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:

Code:

apt-get install php5-cgi

Um PHP5 in Lighttpd zu aktivieren, müssen wir php.ini (/etc/php5/cgi/php.ini) anpassen.

Code:

vi /etc/php5/cgi/php.ini
PHP-Code:

cgi.fix_pathinfo 1  # ; <--  entfernen 

Dann öffnen wir /etc/lighttpd/lighttpd.conf und fügen “mod_fastcgi”, zur server.modules hinzu:
PHP-Code:

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:
PHP-Code:

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

danach starten wir Lighttpd neu:
Code:

/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.

Code:

vi /var/www/info.php
in die info.php kommt:
PHP-Code:

<?php
phpinfo
();
?>


Nun rufen wir diese Datei
(http://ip/info.php) in einem Browser auf :
http://info-panel.net//test/upload/7...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
Code:

apt-get install mysql-server phpmyadmin
Es wird das Passwort für Root unter MySQL5 abgefragt:
http://info-panel.net//test/upload/5...4-de28d1d0.jpg

und es wird gefragt welcher Webserver für MySQL5 konfiguriert werden soll (wir wollen lighttpd ):
http://info-panel.net//test/upload/7...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:

Code:

apt-cache search php5
Wähle diejenigen aus, die Du brauchst und installiere sie wie folgt:
Code:

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...

Code:

cd /var/www
Code:

ln -s /usr/share/phpmyadmin /var/www/phpmyadmin

Starte Lighttpd jetzt neu:

Code:

/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/7...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:

Code:

expose_php = On  <--- auf Off setzen!
Code:

session.hash_function  = 0 <--- auf 1 ändern!
Code:

session.hash_bits_per_character = 4  <--- auf 6 ändern!

suche
Code:

disable_functions
und verbiete was du nicht brauchst:
Code:

disable_functions = exec, system, passthru, shell_exec, escapeshellcmd, proc_open, proc_nice, ini_restore, popen, rename, chgrp, chown, highlight_file, show_source, chmod, phpinfo
Achtung, 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:
Code:

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.
PHP-Code:

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/

PHP-Code:

$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:
PHP-Code:

$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.

Code:

nano /etc/lighttpd/passwd
Um den entsprechenden Inhalt zu erstellen, empfehle ich einen .htaccess Generator.
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:

Code:

/etc/init.d/lighttpd reload
Ok 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

Code:

cd /etc/lighttpd/
Code:

openssl req -new -x509 -keyout lighttpd.pem -out lighttpd.pem -days 365 -nodes
Code:

chmod 400 /etc/lighttpd/lighttpd.pem
öffne die lighttpd.conf und mache https startklar.

PHP-Code:

    $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 klicken.


jetzt leiten wir alles von Port 80 (http) auf 443 (https)
PHP-Code:

$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
Code:

evasive.max-conns-per-ip = 50

und Kontrolliere die Zugriffe pro IP
die Minute.

404 Page
Code:

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

Setze einen Server-Tag:

Code:

server.tag = "My-Webserver"

Verbiete Server Dir Listing:

Code:

server.dir-listing = "disable"
Jetzt fehlt uns nur noch die Domain, dazu fügt ihr folgendes in eure lighttpd.conf

PHP-Code:

    $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
Code:

chmod 445 /home/domain
Hier noch ein Beispiel wie man den Verzeichnisschutz auf einer Domain anwendet.

PHP-Code:

    $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:
Code:

"mod_redirect"
PHP-Code:

$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!

PHP-Code:

#####################################
#    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 19: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
.

PHP-Code:

bind-address        127.0.0.1 



danach mysql neu starten.


Code:

service mysql restart
Überprüfen:
Code:

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 22: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 06:02

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

Stifler 12.05.2015 10:21

Also ich finde Apache 2.4 recht passabel!


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:16 Uhr.

Powered by vBulletin® Version 3.8.9 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.