Apache

Aus brainelectronics Wiki
Wechseln zu: Navigation, Suche

Installation

Linux

   $ sudo apt-get install apache2

Debian Jessie Pi

CGI Scripts

   $ sudo a2enmod cgi
   $ nano /etc/apache2/apache2.conf 

Relativ weit am Ende sind mehrere Definitionen, bei diesen folgendes einfügen, um Python Files im Verzeichnis /var/www/html/ ausführen zu dürfen.

<Directory /var/www/html/>
        Options +ExecCGI
        AddHandler cgi-script .py
</Directory>
 
   $ cd /var/www/html/
   $ sudo nano test.py
#!/usr/bin/python

import os
dir_path = os.path.dirname(os.path.realpath(__file__))

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Hello CGI</title>"
print "</head>"
print "<body>"
print "Test Python Page in %s" %dir_path
print "</body>"
print "</html>"
 
   $ sudo chmod +x test.py
   $ sudo service apache2 restart

Damit funktionieren Python Scripte im Verzeichnis /var/www/html/

Debian Stretch Server

CGI Scripts

   $ sudo a2enmod cgi

<IfModule mod_alias.c>
        <IfModule mod_cgi.c>
                Define ENABLE_USR_LIB_CGI_BIN
        </IfModule>

        <IfModule mod_cgid.c>
                Define ENABLE_USR_LIB_CGI_BIN
        </IfModule>

        <IfDefine ENABLE_USR_LIB_CGI_BIN>
# this was default
# place files in /usr/lib/cgi-bin which are executed/called from
# server-adress.com/cgi-bin
# e.g. second.pl located in /usr/lib/cgi-bin can be called with
# server-adress.com/second.pl
                ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
                <Directory "/usr/lib/cgi-bin">
                        AllowOverride None
                        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                        AddHandler cgi-script .cgi .py
                        Require all granted
                </Directory>
# end of default

# this allows to run py scripts located at /raid1/www/html/PyTest/ 
# by accessing server-adress.de/PyTest/test.py
                ScriptAlias /PyTest/ /raid1/www/html/PyTest/
                <Directory "/raid1/www/html/PyTest">
                        AllowOverride All
                        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                        AddHandler cgi-script .cgi .py
                        Require all granted
                </Directory>
        </IfDefine>
</IfModule>
 
   $ sudo service apache2 restart

Mac

Aktivierung

Apache 2.2.29 und PHP 5.4.45 sind bereits mitgeliefert und müssen nur noch aktiviert werden.

   $ sudo nano /private/etc/apache2/httpd.conf

Zeile 114 etwa muss einkommentiert werden.

LoadModule php5_module      libexec/apache2/libphp5.so
 

CGI Scripts

Default im System

für Scripts wie Perl oder Python:

   $ sudo nano /private/etc/apache2/httpd.conf

Circa Zeile 340 wird hinzugefügt:

#### das ist bereits vorhanden
<Directory "/Library/WebServer/CGI-Executables">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>
#### ende vorhanden
#### ab hier hinzu
<Directory "/Users/Jones/Sites/cgi-bin/">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>
 
   $ cd /Library/WebServer/CGI-Executables/
   $ sudo nano test.pl
#!/usr/bin/perl
print "Content-type: text/html; charset=iso-8859-1\n\n";
print "<html>";
print "<body>";
print "Test Perl Page";
print "</body>";
print "</html>";
 
   $ sudo nano test.py
#!/usr/bin/python

import os
dir_path = os.path.dirname(os.path.realpath(__file__))

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Hello CGI</title>"
print "</head>"
print "<body>"
print "Test Python Page in %s" %dir_path
print "</body>"
print "</html>"
 
   $ sudo chmod +x test.pl
   $ sudo chmod +x test.py
   $ sudo apachectl restart

Damit funktionieren Perl und Python Scripte im Verzeichnis /Library/WebServer/CGI-Executables/

Für einen Benutzer

Für die Ausführung unter der Webpage Folder eines Users muss folgende Ergänzung vorgenommen werden:

   $ mkdir Users/Jones/Sites/cgi-bin
   $ sudo nano /etc/apache2/users/Jones.conf 
AddHandler cgi-script .cgi .pl .py
<DirectoryMatch "^/Users/Jones/Sites/?.*/">
    Options +ExecCGI -Indexes
    SetHandler cgi-script
</DirectoryMatch>
 

Anmerkung: Der obige wiki Text ist korrekt. D.h. alle ^, ? und * gehören so!

   $ sudo apachectl restart

Dies erlaubt die Verwendung von CGI Files im Nutzer Ordner Sites/ oder einem Unterordner z.B. Sites/Website23/

Start

Startet den Apache, welcher unter /Library/WebServer/Documents/ sein Verzeichnis hat.

   $ sudo apachectl start

Um auch die Dateien aus /User/DeinBenutzername/Sites zu verwenden, muss eine Config Datei dafür angelegt werden. Zum herausfinden des Benutzernamen und anschließende Erstellung der Config Datei wird folgendermaßen vorgegangen:

   $ whoami 
   $ sudo nano /etc/apache2/users/DeinBenutzername.conf 
<Directory "/Users/DeinBenutzername/Sites/">
    Options Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from localhost
</Directory>
 
   $ sudo apachectl restart

Sollte der Ordner Sites nicht im Homedirectory des jeweiligen Benutzers liegen, so wird dieser einfach erstellt und eben mit "Sites" benannt. Mac erkennt anschließend den Ordner und vergibt dazu gleich das passende Icon.

Erreichbarkeit

Sind die obigen Schritte ausgeführt, so kann jetzt unter folgender Adresse der Inhalt des Ordners Sites des jeweiligen Benutzer angezeigt werden. http://localhost/~DeinBenutzername oder der direkte Ordner des Systems unter http://localhost/

VirtualHost

Es wird eine neue default conf Datei kopiert und entsprechend angepasst:

   $ cd /etc/apache2/sites-available/
   $ sudo cp 000-default.conf meine-neue-seite.conf
   $ sudo nano meine-neue-seite.conf

Wurde für den Computer eine DynDNS eingerichtet, z.B. pi.deine-domain.de kann über das Hosting Packet unter Domains -> Neuer Subdomain ein weiterer Subdomain (gogs.deine-domain.de) für eine spezielle Anwendung im nachfolgenden Beispiel Gogs eingerichtet werden. Wird dann im neuen Subdomain (gogs.deine-domain.de) unter DNS-Verwaltung ein CNAME-Record mit pi.deine-domain.de. (<- der Punkt am Ende ist notwendig!) hinzugefügt, so ist die Anwendung mit den nachfolgenden Einstellungen über diesen neuen Subdomain erreichbar.

Config übernehmen

   $ sudo a2ensite meine-neue-seite.conf
   $ sudo service apache2 restart

Weiterleitung auf Subdomain

Die Virtual Hosts werden verwendet um z.B. eine Anwendung wie Gogs, welcher nach der Installation und IP-des-Pi:3000 erreichbar ist, umzubiegen auf den Server Namen, in diesem Fall gogs.deine-domain.de und aktivieren den ProxyPass für den entsprechenden Port

<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port $
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) th$
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        ServerName  gogs.brainelectronics.de

        ServerAdmin webmaster@localhost
        #DocumentRoot /var/www/html

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

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

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf

        ProxyPass / http://127.0.0.1:3000/
        ProxyPassReverse / http://127.0.0.1:3000/
</VirtualHost>
 

Anderes DocumentRoot

Das Standard Verzeichnis für über das Web erreichbare Dateien und Seiten ist (bei Jessy/Debian) /var/www/html. Eine dort abgegete Datei test.html ist, wie bekannt, unter IP-des-Pi/test.html erreichbar. Soll nun aber ein weiteres Verzeichnis z.B. für größere Dateien auf einem externen USB Stick bzw. anderem Verzeichnis abgelegt werden, so kann dies über das DocumentRoot spezifiziert werden. Liegen die Dateien in mnt/external/upload/ muss das DocumentRoot in der conf Datei eben /mnt/external/upload/ lauten. Zudem richten wir die Subdomain ext.dein-domain.de ein und fügen sie beim ServerName ein. Jetzt sind noch kleine Einstellungen in der apache.conf Datei vorzunehmen:

   $ cd /etc/apache2/
   $ sudo nano apache.conf

Hier muss nun im unteren drittel der Datei unter den anderen Directorys der neue Pfad weiter spezifiziert werden. Dies erlaubt den Zugriff über das Web

<Directory /mnt/external/upload/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>
 

Damit ist nun die Datei largeMovie.avi im Verzeichnis /mnt/external/upload/ über ext.dein-domain.de/largeMovie.avi erreichbar

Directory Listing

Ist in einem Verzeichnis keine index.html Datei vorhanden, welche die Weiterleitung auf die entsprechende Datei oder Website vornimmt, so kann ein Directory Listing für dieses Verzeichnis eingerichtet werden. Damit werden beim Aufruf des DocumentRoot Verzeichnis alle dort befindlichen Dateien aufgelistet.
Für Strato Server kann diese Einstellung über Datenbanken & Websiten -> Website-Configurator -> Verzeichnis-Optionen
Directory Listing

   $ cd /etc/apache2/
   $ sudo nano apache.conf

Hier muss nun im unteren drittel der Datei unter dem entsprechenden Directory weiter spezifiziert werden.
Wichtig hierbei ist nach Options das Indexes

<Directory /pfad/wo/directorys/listing/erfolgen/>
        Options Includes Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>
 

Ausschluss von Dateien

Sollen beispielsweise alle Text Dateien nicht beim Directory Listing angezeigt werden,

<Directory /pfad/wo/directorys/listing/erfolgen/>
        Options Includes Indexes FollowSymLinks IndexIgnore *.txt
        AllowOverride None
        Require all granted
</Directory>
 

Ist die entsprechende Directory bereits vorhanden, so muss nur zwischen Options und Indexes die Option Includes eingefügt werden und die Config übernommen werden.

Passwort Schutz

Benutzer erstellen

Abschließend wird noch ein Benutzer jane erstellt, mit dem auf den Ordner 'protected' zugegriffen werden darf. Jeder weitere Nutzer muss ohne die Option "htpasswd -c /etc/...." angegeben werden, da sonst die Datei überschrieben wird.

   $ sudo htpasswd /etc/apache2/.htpasswd jane

File

Soll für eine einzige Datei ein Log In Passwort erforderlich sein, so kann dies folgendermaßen umgesetzt werden.
Die .htaccess Datei muss sich in dem Verzeichnis befinden, in dem die zu schützende Datei liegt.

   $ cd /var/www/html
   $ nano .htaccess
<FilesMatch "nonPublicFile.html">
        AuthType Basic
        AuthName "Username and password required"
        AuthUserFile /etc/apache2/.htpasswd
        Require user restrictedUser
</FilesMatch>
 

Zugriff nur Lokal

Soll Datei nur vom Server selbst verwendet werden können, so kann dies durch einen Bann auf den Localhost umgesetzt werden.

   $ cd /var/www/html
   $ nano .htaccess
<FilesMatch "onlyLocalAccess.php">
        Order deny, allow
        Deny from all
        Allow from 127.0.0.1
</FilesMatch>
 

Die Apache config Datei an entsprechender Stelle ändern, dass AllowOverride All ist.

   $ nano /etc/apache2/apache2.conf
<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>
  
   $ sudo service apache2 restart

Directory

Soll für ein Verzeichnis ein Log In Passwort erforderlich sein, so kann dieses für ein Verzeichnis folgendermaßen angelegt werden.
Directory Protection

   $ cd /var/www
   $ mkdir download
   $ cd download
   $ nano hello.txt ### später öffentlich einsehbar
   $ mkdir public
   $ cd public
   $ nano hallo.txt ### später ebenfalls öffentlich einsehbar
   $ mkdir protected
   $ cd protected
   $ nano halloProtected.txt ### später nur mit log in erreichbar
   $ cd /etc/apache2/sites-available/
   $ nano secureDir.conf
<VirtualHost *:80>
        ServerName download.your-domain.de

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/download

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        #LogLevel info ssl:warn

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

        # Base Verzeichnis offentlich zuganglich
        <Directory "/var/www/download">
                AuthType None
                Require all granted
        </Directory>

        # Verzeichnis nur als Benutzer restrictedUser zuganglich
        <Directory "/var/www/download/protected">

                AuthType Basic
                AuthName "Restricted Content"
                AuthUserFile /etc/apache2/.htpasswd
                Require user restrictedUser
        </Directory>

        # Verzeichnis ebenfalls offentlich zuganglich
        <Directory "/var/www/download/public">
                AuthType None
                Require all granted
        </Directory>
</VirtualHost>
 
   $ sudo a2ensite secureDir.conf
   $ cd /etc/apache2/
   $ sudo nano apache.conf

an passender Stelle einfügen, damit Directory Listing durchgeführt wird. Dieses zeigt anschließend nur die Verzeichnisse an, welche auch öffenltich zugägnlich sind. In diesem Fall also nur die Dateien im Verzeichnis /var/www/download sowie den Unterordner public. Ist man als entsprechender Nutzer eingeloggt, so wird diesem auch die für ihn zugägnlichen Verzeichnisse angezeigt

<Directory /var/www/download/>
        Options Indexes FollowSymLinks
</Directory>
 
   $ sudo service apache2 restart

Credits

Apache Virtual Hosts
Apache auf Mac
Apache einstellen am Mac
Apache CGI Script im Sites Ordner
htaccess und htpasswd nutzen