Durch Nutzung dieser Webseite stimmen Sie dem Einsatz von Cookies und Werbung zu. Weitere Informationen



KnowHow 8.19 ''Webserver ''
Stand: 31.07.2017 16:42:00

Inhalt | Suche | Homepage | Kontakt | Impressum

- Durch Anklicken im Inhaltsverzeichnis kann direkt zum Thema gesprungen werden.
- Begriffe auf dieser Seite können mit Ihrer Browser-Funktion ''Bearbeiten -> Suchen'' oder mit den Tasten [Strg]-[F] gesucht werden.
- Des weiteren gibt es noch eine Suchfunktion über alles.
- Es sind mehr Informationen verfügbar, als hier angegeben. Falls Sie etwas vermissen, scheuen Sie sich nicht nachzufragen, wir antworten gerne.




8.19.1 Webserver einrichten

http://www.zentralplan.de/?37
http://community.linuxmint.com/tutorial/view/486
http://wiki.ubuntuusers.de/Apache

Ein LAMP-Server ist ein lokaler Webserver, der unter Linux die Produktion von dynamischen Websites unter Verwendung von PHP und MySQL auf dem eigenen lokalen Rechner ermöglicht, wodurch während der Entwicklungsphase das Hochladen von PHP-Skripten auf einen entfernten Webspace überflüssig wird. LAMP besteht aus folgenden Komponenten:
- Apache 2.4.6 (Webserver)
- PHP-Modul 5.5.6 (Skriptinterpreter)
- MySQL-Server 5.5.33 (Datenbank)
- phpMyAdmin 4.0.9 (Verwaltungsoberfläche für MySQL)



8.19.1.1 Apache2 installieren:

sudo apt-get install apache2

Installiert wird Apache2 unter:
/etc/apache2

Die Homepage steht unter:
/var/www/html/



8.19.1.2 Lokaler Test

Im Webbrowser aufrufen:
http://localhost/



8.19.1.3 Schreibzugriff für User einrichten

Dafür eine Gruppe (z.B. www) anlegen, einen User in der Gruppe eintragen und die Rechte anpassen:

sudo groupadd www
sudo adduser bur www
sudo chgrp www /var/www
sudo chmod g+w /var/www
sudo chgrp www /var/www/html
sudo chmod g+w /var/www/html



8.19.1.4 Perl-Script

Wichtige Bedingungen:
- Ein Perl-Script unter Linux muss das Unix-Format und darf kein DOS-Format haben,
  d.h. CR und nicht CR LF
- Die Datei muss als ausführbar gesetzt sein

Konvertierung mit Linux-Tools
To convert a Windows file to a Unix file, enter:
dos2unix winfile.txt unixfile.txt
dos2unix *.pl *.pl
To convert a Unix file to Windows, enter:
unix2dos unixfile.txt winfile.txt
Quelle: https://kb.iu.edu/d/acux

Konvertierung mit Perl
To convert a Windows text file to a Unix text file using Perl, enter:
perl -p -e 's/\r$//' < winfile.txt > unixfile.txt
To convert from a Unix text file to a Windows text file, enter:
perl -p -e 's/\n/\r\n/' < unixfile.txt > winfile.txt
Quelle: https://kb.iu.edu/d/acux



8.19.1.5 Apache-Server für Perl-CGI-Script (cgi-bin) einrichten

Quelle: http://perlmaven.com/perl-cgi-script-with-apache2

Konfigurations-Datei öffnen:
sudo gedit /etc/apache2/sites-enabled/000-default.conf

Inhalt (ohne Kommentarzeilen):
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Folgendes hinter "DocumentRoot /var/www/html" in der Datei eintragen:
    ScriptAlias /cgi-bin/ /var/www/html/cgi-bin/
    <Directory "/var/www/html/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Require all granted
    </Directory>
Das Verzeichnis "/var/www/html/cgi-bin" kann beleibig gewählt werden

Der Port <VirtualHost *:80> muss dem definierten in /etc/apache2/ports.conf entsprechen!

Default-mäßig ist bei Apache das CGI-Module nicht enabled.
Dieses kann man daran erkennen, dass das Verzeichnis "mods-enabled" keine cgi-Dateien enthält:
ls -l /etc/apache2/mods-enabled/ | grep cgi
ls -l /etc/apache2/mods-available/ | grep cgi
-rw-r--r-- 1 root root   115 Jul 20  2013 cgid.conf
-rw-r--r-- 1 root root    60 Jul 20  2013 cgid.load
-rw-r--r-- 1 root root    58 Jul 20  2013 cgi.load
-rw-r--r-- 1 root root    89 Jul 20  2013 proxy_fcgi.load
-rw-r--r-- 1 root root    89 Jul 20  2013 proxy_scgi.load

Zum Aktivieren erzeugt man symbolische Links für die zwei cgid-Dateien:
sudo ln -s /etc/apache2/mods-available/cgid.load /etc/apache2/mods-enabled/
sudo ln -s /etc/apache2/mods-available/cgid.conf /etc/apache2/mods-enabled/

Danach kann man nochmal prüfen:
ls -l /etc/apache2/mods-enabled/ | grep cgi
lrwxrwxrwx 1 root root 37 Mar 19 14:39 cgid.conf -> /etc/apache2/mods-available/cgid.conf
lrwxrwxrwx 1 root root 37 Mar 19 14:39 cgid.load -> /etc/apache2/mods-available/cgid.load

Jetzt den Apache-Server neu laden, damit er die neue Konfiguration erhält:
sudo service apache2 reload

Eventuell ist Folgendes noch nötig:
sudo a2enmod cgi
sudo service apache2 restart

Andere Quellen:
http://forum.ubuntuusers.de/topic/bekomme-mit-apache2-kein-cgi-zum-laufen/
http://httpd.apache.org/docs/2.4/mod/core.html#servername
http://askubuntu.com/questions/403067/cgi-bin-not-work


8.19.1.6 Schreibrechte

Damit Perls-Scripts Daten schreiben können, muss das Daten-Verzeichnis Schreibrechte für alle besitzen:
chmod 777 <Verzeichnis>


8.19.1.7 Freigabe für das Internet

Fritzbox einstellen unter http://fritz.box/
Internet -> Freigaben -> Portfreigaben:
Neue Portfreigabe für den Rechner
Bezeichnung: HTTP-Server
Protokoll: TCP
Port: 80

Alle Dateien und Verzeichnisse müssen Zugriffsrechte für alle haben.
User: bur, Gruppe www, alle



8.19.1.8 Apache starten / stopppen:

sudo /etc/init.d/apache2 start
sudo /etc/init.d/apache2 stop
sudo /etc/init.d/apache2 restart
sudo /etc/init.d/apache2 reloadgedit
sudo /etc/init.d/apache2 force-reload

  start        : startet den Webserver
  stop         : stoppt den Server
  restart      : startet den Server neu, bestehende Verbindungen auf den Server werden gekappt
  reload       : lädt die Konfigurationsdateien neu, ohne dass Verbindungen getrennt werden
  force-reload : Lädt die Konfigurationsdateien neu, auch wenn dabei Verbindungen getrennt werden müssen

sudo update-rc.d -f apache2 remove  # Apache2 aus der Autostartliste entfernen
sudo update-rc.d apache2 defaults   # Apache2 wieder der Autostartliste hinzufügen



8.19.1.9 Perl Module installieren

siehe Kapitel "Perl"



8.19.1.10 Apache Logfiles

gedit /var/log/apache2/access.log

gedit /var/log/apache2/error.log



8.19.1.11 Verzeichnis umziehen

Verzeichnis kopieren:
/var/www -> /media/d/www

Rechte der Top-Pfade setzen:
  /media und /media/d müssen die Rechte für "Andere" auf "Auf Dateien zugreifen" gesetzt werden
sudo chmod 775 /media
sudo chmod 775 /media/d

Rechte der Homepage setzen:
chgrp -R www /media/d/www
find /media/d/www -type d -exec chmod -v 777 {} +
find /media/d/www -type f -exec chmod -v 666 {} +
find /media/d/www/html/cgi-bin -name "*.htm" -exec chmod -v 777 {} \;
find /media/d/www/html/cgi-bin -name "*.pl" -exec chmod -v 777 {} \;
find /media/d/www/html/privat -type d -exec chmod -v 700 {} +

sudo gedit /etc/apache2/sites-enabled/000-default.conf
Ändern:
  #DocumentRoot /var/www/html
  DocumentRoot /media/d/www/html

sudo gedit /etc/apache2/apache2.conf
Ändern:
  #<Directory /var/www/>
  <Directory /media/d/www/>

sudo /etc/init.d/apache2 reload


Falls dir Rechte nicht passen, kommt folgender Fehler:
gedit /var/log/apache2/error.log
[core:error] [pid 6157:tid 140622226118400] (13)Permission denied: [client 88.72.109.38:41390] AH00035: access to / denied (filesystem path '/media/d/www') because search permissions are missing on a component of the path


http://wiki.ubuntuusers.de/Apache
http://forum.ubuntuusers.de/topic/ich-moechte-denn-var-www-ort-aendern/
http://blog.guenter-schenk.com/2012/05/10/xampp-projektdateien-in-anderes-laufwerk-verschieben/
http://www.multimediaforum.de/threads/217547419-403-forbidden-apache2-varwwwhtml-auf-sd-card-verschieben-ext4



8.19.1.12 Probleme

Problem:
Beim Dual-Boot-System mit Linux und Windows:
Wenn zwischenzeitlich auf Windows gebootet wird, ist danach unter Linux der Server vom Internet nicht mehr erreichbar.
Auswirkung z.B.:
http://talky.selfhost.eu/cgi-bin/wetterdaten/wetterdaten.pl -> funktioniert nicht
http://localhost/cgi-bin/wetterdaten/wetterdaten.pl -> funktioniert

Lösung:
Windows ändert in der Fritzbox den Namen und die IP-Adresse des Rechners auf den Namen unter Windows.
Unter Windows sollte der Rechner den selben Namen haben wie unter Linux.
Korrektur in Windows:
-> Systemsteuerung -> System: den Namen und die Gruppe anpassen
Korrektur in der Fritzbox http://fritz.box/:
-> Internet -> Freigaben: HTTP-Server auf den richtigen PC mit dem richtigen Namen einstellen


Problem:
Bei Perl-CGI-Script für HTML-Ausgabe:
Fehler in gedit /var/log/apache2/error.log: "End of script output before headers"

Lösung:
- Datei ist nicht im Unix-Format
- Rechte müssen richtig gesetzt sein
- Perl-Datei muss für HTML folgenden Code enthalten:
  #!/usr/bin/perl
  print "Content-Type: text/html","\n\n";



8.19.2 Password-Schutz

http://wiki.selfhtml.org/wiki/Webserver/htaccess
http://httpd.apache.org/docs/2.2/howto/htaccess.html

Überschreibrechte in /etc/apache2/apache2.conf (früher httpd.conf) erlauben,
sodass ein Password-Schutz mit ".htaccess"-Dateien möglich ist:
sudo gedit /etc/apache2/apache2.conf
...
<Directory /media/d/www/>
  Options Indexes FollowSymLinks
  AllowOverride None
  Require all granted
</Directory>
...
ändern zu:
...
<Directory /media/d/www/>
  Options Indexes FollowSymLinks
  AllowOverride All
  Require all granted
</Directory>
...

Apache-Server neu laden und starten:
sudo /etc/init.d/apache2 stop
sudo /etc/init.d/apache2 reload
sudo /etc/init.d/apache2 start

Beispiel Zugriffsdaten-Datei ".htaccess" im zu schützenden Verzeichnis:
AuthType Basic
AuthName "privat"
AuthUserFile /media/d/www/html/privat/.htusers
Require user burgermeister

Tool htpasswd installieren:
sudo apt-get install apache2-utils

Beispiel neuen User anlegen und falls noch nicht vorhanden die Password-Datei im zu schützenden Verzeichnis erzeugen:
htpasswd -c .htusers burgermeister



8.19.3 Umgebungs-Variablen

# http://www.cgi101.com/class/ch3/text.html
print "DOCUMENT_ROOT: "   . $ENV{DOCUMENT_ROOT}   . "<br>\n"; # The root directory of your server
print "HTTP_COOKIE: "     . $ENV{HTTP_COOKIE}     . "<br>\n"; # The visitor's cookie, if one is set
print "HTTP_HOST: "       . $ENV{HTTP_HOST}       . "<br>\n"; # The hostname of your server
print "HTTP_REFERER: "    . $ENV{HTTP_REFERER}    . "<br>\n"; # The URL of the page that called your script
print "HTTP_USER_AGENT: " . $ENV{HTTP_USER_AGENT} . "<br>\n"; # The browser type of the visitor
print "HTTPS: "           . $ENV{HTTPS}           . "<br>\n"; # "on" if the script is being called through a secure server
print "PATH: "            . $ENV{PATH}            . "<br>\n"; # The system path your server is running under
print "QUERY_STRING: "    . $ENV{QUERY_STRING}    . "<br>\n"; # The query string (see GET, below)
print "REMOTE_ADDR: "     . $ENV{REMOTE_ADDR}     . "<br>\n"; # The IP address of the visitor
print "REMOTE_HOST: "     . $ENV{REMOTE_HOST}     . "<br>\n"; # The hostname of the visitor (if your server has reverse-name-lookups on; otherwise this is the IP address again)
print "REMOTE_PORT: "     . $ENV{REMOTE_PORT}     . "<br>\n"; # The port the visitor is connected to on the web server
print "REMOTE_USER: "     . $ENV{REMOTE_USER}     . "<br>\n"; # The visitor's username (for .htaccess-protected pages)
print "REQUEST_METHOD: "  . $ENV{REQUEST_METHOD}  . "<br>\n"; # GET or POST
print "REQUEST_URI: "     . $ENV{REQUEST_URI}     . "<br>\n"; # The interpreted pathname of the requested document or CGI (relative to the document root)
print "SCRIPT_FILENAME: " . $ENV{SCRIPT_FILENAME} . "<br>\n"; # The full pathname of the current CGI
print "SCRIPT_NAME: "     . $ENV{SCRIPT_NAME}     . "<br>\n"; # The interpreted pathname of the current CGI (relative to the document root)
print "SERVER_ADMIN: "    . $ENV{SERVER_ADMIN}    . "<br>\n"; # The email address for your server's webmaster
print "SERVER_NAME: "     . $ENV{SERVER_NAME}     . "<br>\n"; # Your server's fully qualified domain name (e.g. www.cgi101.com)
print "SERVER_PORT: "     . $ENV{SERVER_PORT}     . "<br>\n"; # The port number your server is listening on
print "SERVER_SOFTWARE: " . $ENV{SERVER_SOFTWARE} . "<br>\n"; # The server software you're using (such as Apache 1.3)



8.19.4 FTP-Server


8.19.4.1 FTP-Server einrichten

Quellen:
https://xuad.net/artikel/apache-inkl-ftps-installieren/
http://de.wikihow.com/Einen-FTP-Server-in-Ubuntu-Linux-einrichten
https://www.administrator.de/frage/ftp-server-apache-einrichten-11054.html
http://www.jonathanmoeller.com/screed/?p=3947
https://wiki.ubuntuusers.de/FTP/
https://community.linuxmint.com/tutorial/view/1728
https://de.wikibooks.org/wiki/Linux-Praxisbuch:_Linux_als_FTP-Server


FTP Server z.B. vsftp (very secure FTP daemon) installieren

sudo apt-get install vsftpd

sudo gedit /etc/vsftpd.conf
Einstellungen vornehmen und Kommentarzeichen "#" entfernen:
  local_enable=YES
  write_enable=YES
  anonymous_enable=NO   (niemals YES verwenden, sonst hat jeder Zugriff auf den Server!)

FTP-Server neu starten:
sudo service vsftpd restart

Neue Gruppe anlegen:
sudo addgroup ftpuser

Neuen User anlegen:
sudo adduser ftpaxel -shell /bin/false -home /var/www
-> Geben Sie ein neues UNIX-Passwort ein: ...
-> Vollständiger Name []: ...
...

User ftpaxel zur Gruppe ftpuser hinzufügen:
sudo adduser ftpaxel ftpuser

User löschen:
sudo deluser ftpaxel

Problem:
User hat keinen Zugriff, funktioniert nur mit dem Superuser



8.19.4.2 FTP-Verbindung aufbauen

ftp <Rechner-Name oder IP-Adresse des Rechners, z.B. Axel>
  Connected to Axel.
  220 (vsFTPd 3.0.2)
  Name (Axel:bur):                    -> ohne Angabe von Username, wird der Superuser (hier: bur) eingeloggt
  331 Please specify the password.
  Password: ***





Besucher seit 30.01.2003:

© 2013 Burgermeister  | Home | Main Server | Mirror Server | Kontakt | Impressum | Datenschutz