Apache

HTTPS mit Apache auf Ubuntu

URL-Rewriting (mod_rewrite)

mit mod_rewrite kann man nur schwer lesbare URLs in angenehmere umwandeln und auch Suchmaschinen eine bessere Indizierung ermöglichen.

  • mod_rewrite
  • mod_rewrite Demystified: A Brief Guide With Resources

permanente Umzüge

Wenn man eine Domain oder eine Seite auf eine neue URL umziehen lässt, sollte man korrekt den HTTP-Status 301 (moved permanently) senden. Dann werden sich auch Suchmaschinen die neue URL merken und man bleibt im Suchindex.

Die folgendene Konfiguration kann man global in der Apache-Konfiguration einstellen oder in einer .htaccess-Datei im Stammverzeichnis hinterlegen.

RewriteEngine On
RewriteRule ^(.*)$ http://www.NEUE-SEITE.de/$1 [R=301,L]
RewriteRule .+ http://www.NEUE-SEITE.de/ [R=301,L]

Wenn rigeros alle (alten) URLs auf die neue Startseite gehen sollen:

RewriteEngine On
RedirectMatch (.*) http://www.NEUE-SEITE.de [R=301,L]

Apache Log Rotation

Logs per Script rotieren

Hiermit hat man die Möglichkeit, das rotieren der Logdateien auf Mitternacht zu legen.

mv access_log access_log.old
mv error_log error_log.old
apachectl graceful
sleep 600
gzip access_log.old error_log.old

Logs alle 24 Stunden rotieren

Hiermit wird die Logdatei immer die Logs für genau 24 Stunden enthalten. Gezählt wird ab Prozess-Start.

CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" common

CGI

Möchte man per Knopfdruck ein Script ausführen, dann macht man das per CGI.

In der Konfiguration muss diese Zeile stehen,

ScriptAlias /cgi-bin/ "/srv/www/cgi-bin/"

damit die URLwww.server.de/cgi-bin/“ über den Browser überhaupt erst ansprechbar ist.

Damit die darin liegenden Dateien beim Aufruf auch als Scripte abgearbeitet werden, muss noch die folgende Sektion in die Konfiguration aufgenommen werden:

<Directory "/srv/www/cgi-bin">
        AllowOverride None
        Options +ExecCGI -Includes
        Order allow,deny
        Allow from all
</Directory>

Das Verzeichnis /srv/www/cgi-bin/ muss ausführbar sein und dem selben Benutzer gehören, unter dem der Apache läuft.

z.B.:

chmod -R 0750 /srv/www/cgi-bin/
chown -R www:www /srv/www/cgi-bin/

Passwortschutz auf die gesamte Seite legen

In diesem Beispiel ist /home/http/privat/ das DocumentRoot!

Damit die .htaccess-Datei vom Apache auch gelesen wird, muss AllowOverride eingeschaltet werden, z.B.:

AllowOverride AuthConfig

htaccess

# vi /home/http/privat/.htaccess
AuthType Basic
AuthName "Privatverzeichnis"
AuthUserFile  "/home/etc/httpd/.htpasswd"
AuthGroupFile /dev/null
require valid-user

htpasswd

Trockenübung, so wird keine Datei geschrieben, sondern das Ergebnis lediglich angezeigt:

# htpasswd -n fritz
# htpasswd -nb fritz geheim

Benutzer mit Passwort anlegen:

# htpasswd -c /home/etc/httpd/.htpasswd fritz
New password: 
Re-type new password: 
Adding password for user fritz

Passwort eines Benutzers ändern:

# htpasswd /home/etc/httpd/.htpasswd fritz

neuen Benutzer mit Passwort hinzu fügen:

# htpasswd /home/etc/httpd/.htpasswd otto

Es ist auch möglich das Passwort direkt auf der Kommandozeile mit zu übergeben:

# htpasswd -b /home/etc/httpd/.htpasswd fritz geheim
Updating password for user fritz
# htpasswd -b /home/etc/httpd/.htpasswd otto geheim
Adding password for user otto

Benutzer löschen:

# htpasswd -D /home/etc/httpd/.htpasswd otto

suexec (mit Apache 2.0 auf FreeBSD)

Wie konfiguriere ich einen Webserver mit Apache 2 ?

Apache 2 installieren

# cd /usr/ports/www/apache2/
# make WITH_SUEXEC=yes WITH_THREADS=yes install && make clean
# suexec -V:
  -D AP_DOC_ROOT="/usr/local/www/data"
  -D AP_GID_MIN=1000
  -D AP_HTTPD_USER="www"
  -D AP_LOG_EXEC="/var/log/httpd-suexec.log"
  -D AP_SAFE_PATH="/usr/local/bin:/usr/local/bin:/usr/bin:/bin"
  -D AP_UID_MIN=1000
  -D AP_USERDIR_SUFFIX="public_html"

Wichtig sind für uns hier folgende Angaben:

  1. „AP_DOC_ROOT“; es werden von suEXEC nur unterhalb von diesem CGI-Dateien ausgeführt.
  2. „AP_HTTPD_USER“; suEXEC wird nur laufen, wenn der Apache als der hier eingetragene User läuft.
  3. „AP_GID_MIN“; suEXEC kann nur zu Usern wechseln, die mindestens eine GroupID von der hier angegebenen Höhe haben.
  4. „AP_UID_MIN“; suEXEC kann nur zu Usern wechseln, die mindestens eine UserID von der hier angegebenen Höhe haben.

Jetzt muss als erstes das Verzeichnis angelegt werden

Der Apache läuft in diesem Beispiel mit den folgenden Rechten (siehe /usr/local/etc/apache2/httpd.conf):

        User www
        Group www

Der User des Webacounts (suEXEC) hat die Rechte

        User webuser
        Group webgroup

Am sinnvollsten legt man das Web-Verzeichnis in “/var“ an.

# make  -p /var/www/webuser/cgi-bin       # fuer die CGI-Scripte
# make  -p /var/www/webuser/htdocs        # fuer die HTML-Dateien
# make  -p /var/www/webuser/log           # fuer die LOG-Dateien
 chown -R webuser      /var/www/webuser
 chgrp -R www          /var/www/webuser
 chmod -R 750          /var/www/webuser
 chmod -R 755          /var/www/webuser/cgi-bin
 chgrp -R webgroup     /var/www/webuser/cgi-bin
 chmod -R 770          /var/www/webuser/htdocs
 chown -R 0            /var/www/webuser/logs
 chgrp -R users        /var/www/webuser/logs
 chmod -R 650          /var/www/webuser/logs

symbolischen Link loeschen und neu anlegen

# rm -f /usr/local/www/data
# ln -s /var/www /usr/local/www/data

Webuser anlegen

# vipw
      webuser:*:2000:2000::0:0:Unprivileged user:/nonexistent:/sbin/nologin
# vigr
      webgroup:*:2000

Namensaufloesung

Der zukuenftige Webserver wird die IP „192.168.0.10“ und den Namen „musterweb.de“ erhalten. Jeder Rechner, der auf den Webserver zugreifen soll, braucht diesen Eintrag in der Datei “/etc/hosts“:

192.168.0.10    musterweb.de

Oder man richtet sich einen eigenen DNS ein.

konfigurieren des Apache

# vi /usr/local/etc/apache2/httpd.conf
        NameVirtualHost musterweb.de
            SuexecUserGroup webuser webgroup
            ServerAdmin webmaster@musterweb.de
            DocumentRoot /usr/local/www/data/webuser/htdocs
            ScriptAlias /cgi-bin/ "/usr/local/www/data/webuser/cgi-bin/"
            ServerName musterweb.de
            ErrorLog /usr/local/www/data/webuser/log/error_log
            CustomLog /usr/local/www/data/webuser/log/access_log common

(einfach unten anhängen…)

AKTIVIEREN (ab Apache 2.0.50)

# vi /etc/rc.conf
        apache2_enable="YES"

START:

# /usr/local/etc/rc.d/apache2.sh stop
# /usr/local/etc/rc.d/apache2.sh start
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht:GNU Free Documentation License 1.2
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki