Schlagwort-Archive: apache

Apache Rewrite Cheatsheet

Hier eine Auflistung sinniger und unsinniger Weiterleitungsregeln
Zu fehlerfreien Nutzung ist ein Grundwissen über Webserver Statuscodes (nach RFC 2616) nötig. Nachfolgende wichtige sind auf der Seite http://www.debianhelp.co.uk/errorcodes.htm zu finden. Auch auf Wikipedia findet sich eine detailierte Auflistung aller Codes.

Error code categories

Successful Client Requests:
200 OK
201 Created
202 Accepted
203 Non-Authorative Information
204 No Content
205 Reset Content
206 Partial Content

Client Request Redirected:
300 Multiple Choices
301 Moved Permanently
302 Moved Temporarily
303 See Other
304 Not Modified
305 Use Proxy

Client Request Errors:
400 Bad Request
401 Authorization Required
402 Payment Required (not used yet)
403 Forbidden
404 Not Found
405 Method Not Allowed
406 Not Acceptable (encoding)
407 Proxy Authentication Required
408 Request Timed Out
409 Conflicting Request
410 Gone
411 Content Length Required
412 Precondition Failed
413 Request Entity Too Long
414 Request URI Too Long
415 Unsupported Media Type

Server Errors:
500 Internal Server Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable
504 Gateway Timeout
505 HTTP Version Not Supported

1. Einfache, permanente Weiterleitung (Status 301) an eine andere Adresse (kein DocumentRoot im Vhost notwendig!)

Redirect permanent / https://www.anderedomain.de/

2. URL Umschreibung zur Kanonisierung (SEO)

RewriteCond %{HTTP_HOST} !^www.kommuniziertedomain.de
RewriteRule (.*) http://www.kommuniziertedomain.de%{REQUEST_URI} [R=301,QSA,L]

3. URL immer auf https umschreiben

RewriteCond %{HTTPS} off
RewriteRule (.*)$ https://www.meinedomain.de%{REQUEST_URI} [R=301,QSA,L]

Plesk – Verzeichnis schützen mittels htaccess

Problem:
Ich möchte ein Verzeichnis einer Subdomain über Plesk schützen. Ich verwende Plesk 11.

Lösung:
Im Plesk Backend begebe ich mich zu dem betroffenen „Abonnement“ und verwalte das Hosting, dort gehe ich auf den Reiter „Websites & Domains“. Hier gibt es „etwas versteckt“ den Punkt „Erweiterte Operationen anzeigen“, in dem sich der Menüpunkt „Passwort-geschützte Verzeichnisse“ befindet.

Hier kann man nun die Domain/Subdomain auswählen und im DocumentRoot einen Ordner definieren. Alternativ kann man auch das gesamte DocumentRoot absichern.

Soweit, sogut… nun sollte man den Pfad aufrufen können und die User/Pass abfrage sollte erscheinen.

Ab hier wird es tricky!
Soweit ich das überschauen kann, gibt es unter Plesk keine Möglichkeit die Benutzer und Ihre Passwörter zu pflegen. Das ist manuell zu machen.
Wer Kunde bei HostEurope ist, hat im KIS Backend Zugriff auf einen „Passwortgenerator“, welcher die notwendigen Zeilen für die Passwortdatei generiert. Alternativ kann man auf dem Server selbst auch den Befehl „htpasswd“ zur Erstellung der Zeilen bzw maintainen der Passwortdatei nutzen. Dazu bitte ich um ein genaues Studium der Optionen, sonst ist damit schnell etwas kaputt gemacht.

Man muss jetzt per SSH aufs System und sich in den Hauptordner der Domain/Subdomain bewegen, welche über Plesk gesichert wurde.

Als Beispiel nehme ich jetzt die Subdomain test.example.com

Zuerst schaut man, welche Datei Plesk zur Sicherung vorgesehen hat

grep AuthUserFile /var/www/vhosts/test.example.com/conf/last_httpd.include

Die Ausgabe:

root@example:~# grep AuthUserFile /var/www/vhosts/test.example.com/conf/last_httpd.include
AuthUserFile "/var/www/vhosts/test.example.com/pd/d..httpdocs"

Sollten hier mehrere Dateien genannt werden, dann muss man sich die Datei mit „more“ anschauen, um die jetzt interessante herauszufinden.

more /var/www/vhosts/test.example.com/conf/last_httpd.include

Hat man herausgefunden, welche Datei für die Authentifizierung verantwortlich ist, dann muss diese als „root“ bearbeitet werden. Plesk 11 legt die Datei so an, dass diese nur für den Systemuser „www-data“ lesbar ist.

Mit dem Editor meiner Wahl öffne ich die Datei

vi /var/www/vhosts/test.example.com/pd/d..httpdocs

Wichtig: Pro Zeile ein User, sonst klappt das ganze nicht!

Nach dem Speichern der Modifikation ist das direkt aktiv und man sollte nun das geschützte Verzeichnis mit den eben gespeicherten Wunschdaten betreten können.

Automatisches Verteilen von Apache EntwicklungsVhosts im Netzwerk

Problem:
Ich habe einen Webserver mit xx Auftritten bzw VHosts. Leider muss eine Liste gepflegt werden, in welcher die verfügbaren Hosts eingetragen werden. Automatisiertes Verteilen aktiver VHosts wäre der Hit!

Lösung:
Es gibt für den Apache Webserver ein DNS-SD Modul, welches genau für solche Zwecke entwickelt wurde (Projektseite) und auf Avahi bzw Zeroconf bzw Bonjour aufsetzt.
Das Webservermodul ist im Debian Repository zu haben.

Ich installiere zuerst das Apache Modul mit Abhängigkeiten

apt-get install libapache2-mod-dnssd

aktiviere das Modul und starte den Apache neu

a2enmod mod-dnssd
service apache2 restart

Windowsclients müssen nun Bonjour installieren, das gibt es in kleinster & ausreichender Version im Apple Supportbereich. http://support.apple.com/kb/DL999

Um nun die Seiten in Firefox angezeigt zu bekommen, benötigt man noch folgendes Firefox Plugin
https://addons.mozilla.org/de/firefox/addon/dnssd/

Wichtig für Linux Nutzer: Der Support von Linux wurde, wieso auch immer, leider gedroppt. Die Version 1.0.3 des DNSSD Plugins unterstützt Linux aber noch, daher installiert man dieses – besser als nichts!

Plesk – Modifikationen an der vhost.conf aktivieren

Problem:
Auf einem Plesk 11 System möchte ich, weg von PleskStandards, meinen VHosts noch eigene Optionen geben.

Lösung:
Man muss den Manager von Plesk nutzen, dieser bindet die vhost.conf mit ein „sofern vorhanden“,

Ich erstelle also die vhost.conf, wie zB bei Hosteurope nachzulesen http://faq.hosteurope.de/index.php?cpid=12226 und starte den Config-Build-Prozess

Unter Plesk 11 lautet der Befehl wie folgt:

/usr/local/psa/admin/bin/httpdmng --reconfigure-all

La voila, die Optionen sind aktiv.

Repository für Debianpakete

Problem.
Ich habe Debianpakete und möchte diese Debiankonform auf einem Server hosten

Lösung:
Für diesen Zweck hat Debian das Pakete „reprepro“, der Debian Repository Manager

apt-get install reprepro

reprepro Projektseite

Hier das kurze Manual des Befehls „reprepro“

reprepro - Produce and Manage a Debian package repository

options:
-h, --help: Show this help
-i --ignore : Ignore errors of type .
--keepunreferencedfiles: Do not delete files no longer needed.
--delete: Delete included files if reasonable.
-b, --basedir

: Base directory
--outdir
: Set pool and dists base directory
--distdir
: Override dists directory.
--dbdir
: Directory to place the database in.
--listdir
: Directory to place downloaded lists in.
--confdir
: Directory to search configuration in.
--logdir
: Directory to put requeted log files in.
--methodir
: Use instead of /usr/lib/apt/methods/
-S, --section
: Force include* to set section.
-P, --priority : Force include* to set priority.
-C, --component : Add,list or delete only in component.
-A, --architecture : Add,list or delete only to architecture.
-T, --type : Add,list or delete only type (dsc,deb,udeb).

actions (selection, for more see manpage):
dumpreferences: Print all saved references
dumpunreferenced: Print registered files without reference
deleteunreferenced: Delete and forget all unreferenced files
checkpool: Check if all files in the pool are still in proper shape.
check []
Check for all needed files to be registered properly.
export []
Force (re)generation of Packages.gz/Packages/Sources.gz/Release
update []
Update the given distributions from the configured sources.
remove Remove the given package from the specified distribution.
include <.changes-file>
Include the given upload.
includedeb <.deb-file>
Include the given binary package.
includeudeb <.udeb-file>
Include the given installer binary package.
includedsc <.dsc-file>
Include the given source package.
list List all packages by the given name occurring in the given distribution.
listfilter
List all packages in the given distribution matching the condition.
clearvanished
Remove everything no longer referenced in the distributions config file.

Damit kann man so gut wie alles erledigen. Changes werden später mit „changestool“ verwaltet.

Dann erstellen wir mal ein Repository in /srv/repos

cd /srv/repos
mkdir -p debian/{conf,dists,incoming,indices,logs,pool,project,tmp}

Dann erstell ich meine Beschreibung in conf/distributions

Origin: Your Name
Label: Your repository name
Codename: wheezy
Architectures: i386 amd64 source
Components: main
Description: Description of repository you are creating
SignWith: YOUR-KEY-ID

und die Options conf/options

ask-passphrase
basedir .

Und mein example.deb bekomme ich nun so in das Repository rein

reprepro includedeb wheezy /pfad/zum/example.deb

Nun muss der Pfad nur noch erreichbar sein, via Apache zum Beispiel

LDAP – Passwort Self-Service

Wer seinen Nutzern ein einfaches Webinterface zum Zurücksetzen des eigenen Passwortes zur Verfügung stellen möchte, der ist beim LDAP ToolBox Projekt richtig aufgehoben.

http://ltb-project.org/wiki/documentation/self-service-password

Einfach das DEB Paket herunterladen, installieren und dann die Konfiguration am Webserver nach eigenem Ermessen vornehmen. Funktionierte bisher immer Bestens!

WordPress & phpass vs. Apache Auth

Problem:
Wordpress nutzt seit ca. Version 2.8 kein MD5 Hashing mehr. Es kommt zwischenzeitlich phpass zum Einsatz, um Passwörter einigermaßen sicher zu hashen. Weitere Infos erhält man auf der Projektseite. Ich möchte die WordPressdatenbank für weitere Authentifizierungen nutzen und daher per libapache2-mod-auth-mysql darauf zugreifen.

Lösung:
Man muss sich das Apache2 Modul selbst mit dem Code patchen wie es auf dieser Seite beschrieben ist.
http://stackoverflow.com/questions/12543883/apache-mod-auth-mysql-with-phpass-encrypted-password-wordpress
Ist nicht weiter schwer aber leider leicht unpraktisch. Ich überleg mir noch n anderes AuthKonzept bevor ich etwas realisiere.

Apache2 SVN Modul nutzen

Problem:
Ich möchte unter http://example.tdl/svn auf meiner Webseite einen SVN Bereich zum ein- und auschecken einrichten.

Lösung:
Ich installiere

apt-get install subversion libapache2-svn

Das Apache Modul „dav_svn“ wird unter Ubuntu Lucid automatisch eingebunden und aktiviert.
Mittels

apache2ctl -M

kann das mit Apache-Boardmitteln überprüft werden.

Nun wird ein Repository erstellt, sprich die benötigte Verzeichnisstruktur dazu. Dies kann man lokal oder direkt auf dem Server machen. Wichtig dabei ist die Art des Projektarchivs. Ich entscheide mich für den Standard, Dateibasiert soll es werden, nicht Berkley DB basierend. Siehe auch die Hinweise auf der Projektseite


cd /tmp
mkdir projektarchiv
svnadmin --fs-type fsfs create projektarchiv

Nun habe ich ein Verzeichnis projektarchiv, welches ich in mein DocumentRoot auf dem Webserver transferiere. Wichtig ist hierbei, dass der ausführende (Apache) User Schreibrechte auf die Ordner hat.

Nun muss die Apache Config um einen Webdav Bereich erweitert werden.



DAV svn

# Parent Path für Multirepos
# SVNParentPath /var/www/vhosts/example.tdl/subversion
# SVNListParentPath On

SVNPath /var/www/vhosts/example.tdl/httpdocs/svn

# für WebDAV Gebrauch mit dem Windows-Arbeitsplatz
SVNAutoversioning On

# To enable authorization via mod_authz_svn
# SVNPathAuthz Off

# Access Control Policies
# AuthzSVNAccessFile /etc/apache2/svn-authz

# Style
# SVNIndexXSLT "/svnlog.xslt"

# how to authenticate a user
# AuthType Basic
# AuthName "SVN Repository @"

# only authenticated should access
# Require valid-user

# via htpasswd Datei
# AuthUserFile /etc/apache2/svn-dav-passwd

Achtung: Das Repository ist nun von jedem, also auch von Anonymen, beschreibbar!

Im nächsten Schritt sollte man sich also um die Zugriffsberechtigungen kümmern.

Apache2 Flashstreaming

Heute durfte ich ein Flashstreaming für ein CMS realisieren.

Wer schon mal einen Film o.ä. verlinkt hat, weiss vllt. das man innerhalb der Dateien nicht an beliebige Punkte springen kann ohne die komplette Datei heruntergeladen zu haben. Dies erzeugt viel Traffic, je nach Größe der Datei können auch immense Extrakosten durch Zusatztraffic entstehen

Genau diese Möglichkeit bietet aber Streaming!

Youtube verwendet zum Beispiel als Basis einen lighttpd welcher schon von Haus aus eine Streamingunterstützung mitbringt. Wie aber schaut es mit einem Apache aus?

Dieser bringt die Unterstützung leider nicht mit, sie kann aber nachgepflegt werden.

Um nun Flashvideos (*.flv) von einem Server aus streamen zu können, müssen folgende Requirements erfüllt werden:

1. Apache2 für Streaming vorbereiten

Download der Modul-Sourcen – ich konnte auch noch eine leicht überarbeitete Version im Netz finden.

Ich habe die überarbeitete Version benutzt welche folgende Benefits mitbringt

I’ve modified the module to fix content-length and add last-modified headers. I’ve also added a fix when offset is set to wrong position (i.e. past video length).

Compilieren und Installieren wird mittels apxs2 erledigt.

Schliesslich muss man das Installierte Modul noch in der Konfiguration vermerken, in meinem Fall für *.flv Dateien.

Kurzform als root:

cd ~
wget http://thinkscape.biz/community/mod_flvx.c
aptitude install apache2-prefork-dev
apxs2 -c -i mod_flvx.c
nano /etc/apache2/conf.d/mod_flvx.conf

mit folgendem Inhalt

LoadModule flvx_module /usr/lib/apache2/modules/mod_flvx.so
AddHandler flv-stream .flv

und schliesslich ein Neustart des Apache2 Services

/etc/init.d/apache2 restart

2. Flashdateien mit Metadaten/Keyframes ausstatten

Dies ist ein sehr wichtiger Schritt, denn ohne dies kann das Bewegen innerhalb der Datei nicht funktionieren!

Um flv Dateien entsprechend zu modifizieren, gibt es ein sehr mächtiges Werkzeug mit welchem man flv Dateien auch schneiden oder anderweitig modifizieren kann. All dies könnt Ihr auf der Seite des Herstellers von flvtool2 nachlesen.

Kurzform als root:

aptitude install ruby
wget http://files.rubyforge.mmmultiworks.com/flvtool2/flvtool2-1.0.6.tgz
tar xfz flvtool2-1.0.6.tgz; cd flvtool2-1.0.6
ruby setup.rb config
ruby setup.rb setup
ruby setup.rb install

nun steht das Tool flvtool2 zur Verfügung!

Um die FLV Dateien mit den Metadaten zu bestücken, muss auf jede betreffende Datei

flvtool2 -U datei.flv

angewendet werden.

Nach diesem Schritt kann man nun die Filme zB über den Flowplayer streamen lassen und in seine Webseiten einbauen.