Einrichtung eines Webservers mit PHP5 unter Debian Wheezy (7)

23.05.2013 Server Web Archiv
 
Bitte beachten Sie, dass es hierbei sich um einen von meiner alten Seite migrierten Artikel handelt.

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
Es gibt mehrere Möglichkeiten PHP zu installieren. Dieser Post behandelt zwei Arten:
  • 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-php5
Installation 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-suhosin
Plug-Ins aktivieren:
# a2enmod suexec rewrite ssl actions include
Bei 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-security
Installation 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-suhosin
Plug-Ins aktivieren:
# a2enmod fcgid suexec rewrite ssl actions include
Bei 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.pem
Code: /etc/apache2/sites-available/deinhost

Um diese Seite zu aktivieren, diesen Befehl aufrufen:
# a2ensite domain.tld
Abschließ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-cgi
Code: /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}