Einleitung
Da es im Internet viele Artikel darüber gibt, wie man einen Webserver unter verschiedenen Linux-Distributionen einrichtet, habe ich mich entschlossen, auch meine Server-Konfiguration zu veröffentlichen. Die Voraussetzungen für diesen Blog-Post sind:- Frisch installiertes Debian Wheezy (7)
- Server muss mit einem Netzwerk verbunden sein
- mod_php
- Fast-CGI
mod_php
Bei der Verwendung von mod_php wird der PHP-Interpreter in jeden Apache-Prozess eingebettet, der auf dem Server erzeugt wird. Auf diese Weise ist jeder Apache-Worker in der Lage, PHP-Skripte selbst zu handhaben und auszuführen, ohne mit externen Prozessen kommunizieren zu müssen.Apache installieren:
# apt-get install apache2 libapache2-mod-php5Installation der Erweiterungen:
# apt-get install apache2-suexec php-apc php-pear php5 php5-cli php5-common php5-curl php5-dev php5-gd php5-imagick php5-mcrypt php5-mysql php5-suhosinPlug-Ins aktivieren:
# a2enmod suexec rewrite ssl actions includeBei Bedarf den Apache neu starten:
# /etc/init.d/apache2 restart
Fast-CGI
FastCGI wurde als Mittelweg zwischen dem PHP-Apache-Modul und der CGI-Anwendung eingeführt. Es ermöglicht die Ausführung von Skripten durch einen Interpreter außerhalb des Webservers und enthält die Sicherheitsvorteile von CGI, aber keine der Ineffizienzen von CGI.Apache installieren:
# apt-get install apache2 apache2-mpm-worker php5-cgi libapache2-mod-fcgid libapache-mod-securityInstallation der Erweiterungen:
# apt-get install apache2-suexec php-apc php-pear php5 php5-cli php5-common php5-curl php5-dev php5-gd php5-imagick php5-mcrypt php5-mysql php5-suhosinPlug-Ins aktivieren:
# a2enmod fcgid suexec rewrite ssl actions includeBei Bedarf den Apache neu starten:
# /etc/init.d/apache2 restart
Virtuelle Hosts einrichten
Unter/etc/apache2/sites-available eine Datei mit dem Domainnamen anlegen. Beispiel:
<VirtualHost *:80>
# domain parameters
ServerAdmin nelf@ico.to
ServerName sxnet.eu
ServerAlias www.sxnet.eu
# document root
DocumentRoot /var/www/sxnet.eu/web
<Directory /var/www/sxnet.eu/web/>
Options -Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
# logging
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Code: /etc/apache2/sites-available/deinhost
Für SSL noch folgende Zeilen:
SSLCertificateFile /var/www/sxnet.eu/ssl/sxnet.eu.crt SSLCertificateKeyFile /var/www/sxnet.eu/ssl/sxnet.eu.key SSLCertificateChainFile /var/www/sxnet.eu/ssl/sub.class1.server.ca.pemCode:
/etc/apache2/sites-available/deinhost
Um diese Seite zu aktivieren, diesen Befehl aufrufen:
# a2ensite domain.tldAbschließend muss der Webserver neu geladen werden:
# /etc/init.d/apache2 reload
Virtuelle Hosts mit Fast-CGI
Anlegen des vHost-Benutzers:# adduser --disabled-login --no-create-home deinuser
vHost-Datei bearbeiten:
DocumentRoot /var/www/deinhost/htdocs SuexecUserGroup deinuser deinuser <Directory /var/www/deinhost/htdocs/> FCGIWrapper /var/www/deinhost/conf/cgi.ini .php <FilesMatch \.php$> SetHandler fcgid-script </FilesMatch> Options +ExecCGI Order allow,deny allow from all </Directory>Code:
/etc/apache2/sites-available/deinhost
Setzen der Rechte:
# chown -R deinuser:deinuser /var/www/deinhost # chown www-data:deinuser /var/www/deinhost/web # chmod 755 /var/www/deinhost # chmod 550 /var/www/deinhost/conf/cgi.ini # chmod 770 /var/www/deinhost/web
Konfigurationsdatei:
#!/bin/sh export PHPRC="php.ini" exec /usr/bin/php5-cgiCode:
/var/www/deinhost/conf/cgi.ini
Zusätzlich muss eine Datei php.ini im gleichen Verzeichnis angelegt werden welche die PHP-Einstellungen des jeweiligen virtuellen Hosts beinhaltet. Außerdem muss auf die cgi.ini das immutable Bit gesetzt werden, damit die Datei nicht per FTP bearbeitet werden kann:
# chattr -V +i /var/www/deinhost/conf/cgi.ini
Die Konfigurationsdatei von mod_fcgid anpassen:
<IfModule mod_fcgid.c> # beendet offene CGI Prozesse IdleTimeout 300 # alle n Sekunden prüft fcgid auf unbeschäftigte Prozesse IdleScanInterval 30 # maximale Prozesse parallel MaxProcessCount 15 # gesetzt, um Fehler in Zusammenarbeit mit PHP zu umgehen MaxRequestsPerProcess 500 PHP_Fix_Pathinfo_Enable 1 </IfModule>Code:
/etc/apache2/mods-available/fcgid.conf
Abschließend den Webserver neu laden:
# /etc/init.d/apache2 reload
SSL-Zertifikat einrichten
Zuerst wird ein Schlüsselpaar generiert:# openssl genrsa -out {domain}.key 2048
Dieser Befehl erzeugt die Schlüssel mit jeweils 2048 Bit Länge.
Certificate Signing Request (CSR) erstellen:
# openssl req -new -key {domain}.key -out {domain}.csr
Der CSR enthält üblicherweise Angaben zum Inhaber des Schlüssels wie Organisation, Land, Ort, E-Mail-Adresse und die Adresse des Servers (Common Name, CN) für die das Zertifikat ausgestellt werden soll. Daneben enthält der CSR den öffentlichen Schlüssel.
Diesen schickt man zur Certificate Authority, die ein Zertifikat erstellt. Das Zertifikat wiederum enthält den öffentlichen Schlüssel, Angaben zum Inhaber und zum Aussteller sowie die digitale Signatur des Ausstellers über alle enthaltenen Informationen und den Schlüssel. Damit ist der Schlüssel an eine Identität gebunden. Das fertige Zertifikat speichert man auf seinem Server, der es auf Anfrage eines Clients ausliefert.
Auslesen des CSR:
# cat {domain}.csr
Jetzt muss der ausgegebene Text kopiert und in das Textfeld bei StartSSL eingefügt werden. Nun bekommt man das Zertifikat, das man in eine Datei speichert.
Um das Zertifikat zu aktiveren müssen noch wenige Zeilen in die Apache vHost-Datei eingefügt werden.
SSLEngine on
SSLCertificateFile /var/www/{domain}/ssl/{domain}.crt
SSLCertificateKeyFile /var/www/{domain}/ssl/{domain}.key
SSLCertificateChainFile /var/www/{domain}/ssl/{server_chain}.pem
SSLCACertificateFile /var/www/{domain}/ssl/{server_ca}.pem
Code: /etc/apache2/sites-available/{domain}