Server Setup · 9 min read · Sep 13, 2025
Der perfekte Server - OpenSUSE 12.3 x86_64 (nginx, Dovecot, ISPConfig 3) - Seite 4
10 Nginx, PHP5 (PHP-FPM) und Fcgiwrap installieren
Nginx ist als Paket für OpenSUSE verfügbar, das wir wie folgt installieren können:
zypper install nginxWenn Apache2 bereits auf dem System installiert ist, stoppen Sie es jetzt…
systemctl stop apache2.service… und entfernen Sie die Systemstartlinks von Apache:
systemctl disable apache2.serviceDann erstellen wir die Systemstartlinks für nginx und starten es:
systemctl enable nginx.service
systemctl start nginx.service(Wenn sowohl Apache2 als auch nginx installiert sind, wird der ISPConfig 3-Installer Sie fragen, welches Sie verwenden möchten - antworten Sie in diesem Fall mit nginx. Wenn nur eines dieser beiden installiert ist, wird ISPConfig die erforderliche Konfiguration automatisch vornehmen.)
Wenn Sie IPv6-Adressen mit Ihren nginx vhosts verwenden möchten, tun Sie bitte Folgendes, bevor Sie IPv6 vhosts in ISPConfig erstellen:
Öffnen Sie /etc/sysctl.conf…
vi /etc/sysctl.conf… und fügen Sie die Zeile net.ipv6.bindv6only = 1 hinzu:
| [...] net.ipv6.bindv6only = 1 |
Führen Sie…
sysctl -p… danach aus, damit die Änderung wirksam wird.
Wir können PHP5 in nginx über PHP-FPM zum Laufen bringen (PHP-FPM (FastCGI Process Manager) ist eine alternative PHP FastCGI-Implementierung mit einigen zusätzlichen Funktionen, die für Websites jeder Größe nützlich sind, insbesondere für beschäftigte Websites), die wir wie folgt installieren:
zypper install php5-fpmBevor wir PHP-FPM starten, benennen Sie /etc/php5/fpm/php-fpm.conf.default in /etc/php5/fpm/php-fpm.conf um:
mv /etc/php5/fpm/php-fpm.conf.default /etc/php5/fpm/php-fpm.confÄndern Sie die Berechtigungen des PHP-Sitzungsverzeichnisses:
chmod 1733 /var/lib/php5Öffnen Sie dann /etc/php5/fpm/php-fpm.conf…
vi /etc/php5/fpm/php-fpm.conf… und ändern Sie error_log in /var/log/php-fpm.log:
| [...] error_log = /var/log/php-fpm.log [...] |
Es gibt keine php.ini-Datei für PHP-FPM unter OpenSUSE 12.3, daher kopieren wir die CLI php.ini:
cp /etc/php5/cli/php.ini /etc/php5/fpm/Öffnen Sie als Nächstes /etc/php5/fpm/php.ini…
vi /etc/php5/fpm/php.ini… und setzen Sie cgi.fix_pathinfo auf 0:
| [...] ; cgi.fix_pathinfo bietet *echte* PATH_INFO/PATH_TRANSLATED-Unterstützung für CGI. PHP's ; vorheriges Verhalten war es, PATH_TRANSLATED auf SCRIPT_FILENAME zu setzen und nicht zu verstehen, ; was PATH_INFO ist. Für weitere Informationen zu PATH_INFO siehe die CGI-Spezifikationen. Das Setzen ; dieses Wertes auf 1 bewirkt, dass PHP CGI seine Pfade an die Spezifikation anpasst. Ein Wert ; von null bewirkt, dass PHP sich wie zuvor verhält. Standard ist 1. Sie sollten Ihre Skripte ; so anpassen, dass sie SCRIPT_FILENAME anstelle von PATH_TRANSLATED verwenden. ; http://php.net/cgi.fix-pathinfo cgi.fix_pathinfo=0 [...] |
Erstellen Sie als Nächstes die Systemstartlinks für php-fpm und starten Sie es neu:
systemctl enable php-fpm.service
systemctl restart php-fpm.servicePHP-FPM ist ein Daemon-Prozess, der einen FastCGI-Server auf Port 9000 ausführt, wie Sie in der Ausgabe von
netstat -tapnserver1:~ # netstat -tapn
Aktive Internetverbindungen (Server und etabliert)
Proto Recv-Q Send-Q Lokale Adresse Fremde Adresse Zustand PID/Programmname
tcp 0 0 127.0.0.1:3310 0.0.0.0:* LISTEN 10357/clamd
tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 9869/dovecot
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 10521/nginx
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1275/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 9816/master
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 10695/php-fpm.conf)
tcp 0 0 127.0.0.1:10024 0.0.0.0:* LISTEN 10337/amavisd (mast
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 9694/mysqld
tcp 0 0 192.168.0.100:22 192.168.0.199:4630 ESTABLISHED 1332/0
tcp 0 0 :::22 :::* LISTEN 1275/sshd
tcp 0 0 ::1:25 :::* LISTEN 9816/master
server1:~ #Um MySQL-Unterstützung in PHP zu erhalten, können wir das php5-mysql-Paket installieren. Es ist eine gute Idee, auch einige andere PHP5-Module zu installieren, da Sie diese möglicherweise für Ihre Anwendungen benötigen:
zypper install php5-mysql php5-bcmath php5-bz2 php5-calendar php5-ctype php5-curl php5-dom php5-ftp php5-gd php5-gettext php5-gmp php5-iconv php5-imap php5-ldap php5-mbstring php5-mcrypt php5-odbc php5-openssl php5-pcntl php5-pgsql php5-posix php5-shmop php5-snmp php5-soap php5-sockets php5-sqlite php5-sysvsem php5-tokenizer php5-wddx php5-xmlrpc php5-xsl php5-zlib php5-exif php5-pear php5-sysvmsg php5-sysvshmJetzt starten Sie PHP-FPM neu:
systemctl restart php-fpm.serviceUm CGI-Unterstützung in nginx zu erhalten, installieren wir Fcgiwrap.
Fcgiwrap ist ein CGI-Wrapper, der auch für komplexe CGI-Skripte funktionieren sollte und in Shared-Hosting-Umgebungen verwendet werden kann, da er es jedem vhost ermöglicht, sein eigenes cgi-bin-Verzeichnis zu verwenden.
Da es kein fcgiwrap-Paket für OpenSUSE gibt, müssen wir es selbst erstellen. Zuerst installieren wir einige Voraussetzungen:
zypper install git patch automake glibc-devel gcc flex compat-readline4 db-devel wget gcc-c++ make vim libtool FastCGI-develErstellen Sie die folgenden Symlinks:
ln -s /usr/include/fastcgi/fastcgi.h /usr/local/include/
ln -s /usr/include/fastcgi/fcgi_config.h /usr/local/include/
ln -s /usr/include/fastcgi/fcgi_stdio.h /usr/local/include/
ln -s /usr/include/fastcgi/fcgiapp.h /usr/local/include/
ln -s /usr/include/fastcgi/fcgimisc.h /usr/local/include/
ln -s /usr/include/fastcgi/fcgio.h /usr/local/include/
ln -s /usr/include/fastcgi/fcgios.h /usr/local/include/Jetzt können wir fcgiwrap wie folgt erstellen:
cd /usr/local/src/
git clone git://github.com/gnosek/fcgiwrap.git
cd fcgiwrap
autoreconf -i
./configure
make
make installDies installiert fcgiwrap in /usr/local/sbin/fcgiwrap.
Als Nächstes installieren wir das spawn-fcgi-Paket, das es uns ermöglicht, fcgiwrap als Daemon auszuführen:
zypper install spawn-fcgiWir können jetzt fcgiwrap wie folgt starten:
spawn-fcgi -u wwwrun -g www -s /var/run/fcgiwrap.socket -S -M 0770 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/local/sbin/fcgiwrapSie sollten jetzt den fcgiwrap-Socket in /var/run/fcgiwrap.socket finden, der dem Benutzer wwwrun und der Gruppe www gehört. Wir müssen jetzt den Benutzer nginx zur Gruppe www hinzufügen:
usermod -a -G www nginxLaden Sie nginx danach neu:
systemctl reload nginx.serviceWenn Sie fcgiwrap nicht jedes Mal manuell starten möchten, wenn Sie Ihr System booten, öffnen Sie /etc/init.d/boot.local…
vi /etc/init.d/boot.local… und fügen Sie den spawn-fcgi-Befehl am Ende der Datei hinzu - dies startet fcgiwrap automatisch am Ende des Bootvorgangs:
| [...] /usr/bin/spawn-fcgi -u wwwrun -g www -s /var/run/fcgiwrap.socket -S -M 0770 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/local/sbin/fcgiwrap |
Das war’s! Jetzt, wenn Sie einen nginx vhost erstellen, kümmert sich ISPConfig um die korrekte vhost-Konfiguration.
10.1 phpMyAdmin installieren
Als Nächstes installieren wir phpMyAdmin:
zypper install phpMyAdminDa dies Apache als Abhängigkeit installiert, entfernen Sie die Systemstartlinks von Apache:
systemctl disable apache2.servicephpMyAdmin befindet sich jetzt im Verzeichnis /srv/www/htdocs/phpMyAdmin, aber wir möchten es im Verzeichnis /usr/share/phpmyadmin/ haben, also erstellen wir einen Symlink:
ln -s /srv/www/htdocs/phpMyAdmin /usr/share/phpmyadminNachdem Sie ISPConfig 3 installiert haben, können Sie auf phpMyAdmin wie folgt zugreifen:
Der ISPConfig-Apps-vhost auf Port 8081 für nginx kommt mit einer phpMyAdmin-Konfiguration, sodass Sie http://server1.example.com:8081/phpmyadmin oder http://server1.example.com:8081/phpMyAdmin verwenden können, um auf phpMyAdmin zuzugreifen.
Wenn Sie ein /phpmyadmin oder /phpMyAdmin-Alias verwenden möchten, das Sie von Ihren Websites aus verwenden können, ist dies etwas komplizierter als für Apache, da nginx keine globalen Aliase hat (d.h. Aliase, die für alle vhosts definiert werden können). Daher müssen Sie diese Aliase für jeden vhost definieren, von dem aus Sie auf phpMyAdmin zugreifen möchten.
Um dies zu tun, fügen Sie Folgendes in das nginx-Direktivenfeld auf der Registerkarte Optionen der Website in ISPConfig ein:
| location /phpmyadmin { root /usr/share/; index index.php index.html index.htm; location ~ ^/phpmyadmin/(.+\.php)$ { try_files $uri =404; root /usr/share/; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include /etc/nginx/fastcgi_params; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_buffer_size 128k; fastcgi_buffers 256 4k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; } location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } } location /phpMyAdmin { rewrite ^/* /phpmyadmin last; } |
Wenn Sie http s anstelle von http für Ihren vhost verwenden, sollten Sie die Zeile fastcgi_param HTTPS on; zu Ihrer phpMyAdmin-Konfiguration wie folgt hinzufügen:
| location /phpmyadmin { root /usr/share/; index index.php index.html index.htm; location ~ ^/phpmyadmin/(.+\.php)$ { try_files $uri =404; root /usr/share/; fastcgi_pass 127.0.0.1:9000; fastcgi_param HTTPS on; # <-- diese Zeile hinzufügen fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include /etc/nginx/fastcgi_params; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_buffer_size 128k; fastcgi_buffers 256 4k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; } location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } } location /phpMyAdmin { rewrite ^/* /phpmyadmin last; } |
Wenn Sie sowohl http als auch https für Ihren vhost verwenden, müssen Sie den folgenden Abschnitt in den http {}-Abschnitt in /etc/nginx/nginx.conf (vor allen Include-Zeilen) hinzufügen, der bestimmt, ob der Besucher http oder https verwendet und die Variable $fastcgi_https entsprechend setzt:
vi /etc/nginx/nginx.conf| [...] http { [...] ## Erkennen, wann HTTPS verwendet wird map $scheme $fastcgi_https { default off; https on; } [...] } [...] |
Vergessen Sie nicht, nginx danach neu zu laden:
systemctl reload nginx.serviceGehen Sie dann erneut zum nginx-Direktivenfeld und fügen Sie anstelle von fastcgi_param HTTPS on; die Zeile fastcgi_param HTTPS $fastcgi_https; hinzu, damit Sie phpMyAdmin sowohl für http- als auch für https-Anfragen verwenden können:
| location /phpmyadmin { root /usr/share/; index index.php index.html index.htm; location ~ ^/phpmyadmin/(.+\.php)$ { try_files $uri =404; root /usr/share/; fastcgi_pass 127.0.0.1:9000; fastcgi_param HTTPS $fastcgi_https; # <-- diese Zeile hinzufügen fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include /etc/nginx/fastcgi_params; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_buffer_size 128k; fastcgi_buffers 256 4k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; } location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } } location /phpMyAdmin { rewrite ^/* /phpmyadmin last; } |
11 PureFTPd installieren
Installieren Sie den pure-ftpd FTP-Daemon. Führen Sie aus:
zypper install pure-ftpdsystemctl enable pure-ftpd.service
systemctl start pure-ftpd.serviceJetzt konfigurieren wir PureFTPd, um FTP- und TLS-Sitzungen zuzulassen. FTP ist ein sehr unsicheres Protokoll, da alle Passwörter und alle Daten im Klartext übertragen werden. Durch die Verwendung von TLS kann die gesamte Kommunikation verschlüsselt werden, wodurch FTP viel sicherer wird.
OpenSSL wird von TLS benötigt; um OpenSSL zu installieren, führen wir einfach aus:
zypper install opensslÖffnen Sie /etc/pure-ftpd/pure-ftpd.conf…
vi /etc/pure-ftpd/pure-ftpd.confWenn Sie FTP und TLS-Sitzungen zulassen möchten, setzen Sie TLS auf 1:
| [...] # Diese Option kann drei Werte annehmen: # 0 : SSL/TLS-Verschlüsselungsschicht deaktivieren (Standard). # 1 : sowohl traditionelle als auch verschlüsselte Sitzungen akzeptieren. # 2 : Verbindungen ablehnen, die keine SSL/TLS-Sicherheitsmechanismen verwenden, # einschließlich anonymer Sitzungen. # Kommentieren Sie dies nicht blind. Stellen Sie sicher, dass: # 1) Ihr Server mit SSL/TLS-Unterstützung kompiliert wurde (--with-tls), # 2) Ein gültiges Zertifikat vorhanden ist, # 3) Nur kompatible Clients sich anmelden können. TLS 1 [...] |
Wenn Sie nur TLS-Sitzungen akzeptieren möchten (kein FTP), setzen Sie TLS auf 2:
| [...] # Diese Option kann drei Werte annehmen: # 0 : SSL/TLS-Verschlüsselungsschicht deaktivieren (Standard). # 1 : sowohl traditionelle als auch verschlüsselte Sitzungen akzeptieren. # 2 : Verbindungen ablehnen, die keine SSL/TLS-Sicherheitsmechanismen verwenden, # einschließlich anonymer Sitzungen. # Kommentieren Sie dies nicht blind. Stellen Sie sicher, dass: # 1) Ihr Server mit SSL/TLS-Unterstützung kompiliert wurde (--with-tls), # 2) Ein gültiges Zertifikat vorhanden ist, # 3) Nur kompatible Clients sich anmelden können. TLS 2 [...] |
Um TLS überhaupt nicht zuzulassen (nur FTP), setzen Sie TLS auf 0:
| [...] # Diese Option kann drei Werte annehmen: # 0 : SSL/TLS-Verschlüsselungsschicht deaktivieren (Standard). # 1 : sowohl traditionelle als auch verschlüsselte Sitzungen akzeptieren. # 2 : Verbindungen ablehnen, die keine SSL/TLS-Sicherheitsmechanismen verwenden, # einschließlich anonymer Sitzungen. # Kommentieren Sie dies nicht blind. Stellen Sie sicher, dass: # 1) Ihr Server mit SSL/TLS-Unterstützung kompiliert wurde (--with-tls), # 2) Ein gültiges Zertifikat vorhanden ist, # 3) Nur kompatible Clients sich anmelden können. TLS 0 [...] |
Um TLS verwenden zu können, müssen wir ein SSL-Zertifikat erstellen. Ich erstelle es in /etc/ssl/private/, daher erstelle ich zuerst dieses Verzeichnis:
mkdir -p /etc/ssl/private/Danach können wir das SSL-Zertifikat wie folgt generieren:
openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pemLand (2-Buchstaben-Code) [AU]: <– Geben Sie Ihren Ländernamen ein (z.B. “DE”).
Bundesland oder Provinzname (vollständiger Name) [Some-State]: <– Geben Sie Ihren Bundesland- oder Provinznamen ein.
Ort (z.B. Stadt) []: <– Geben Sie Ihre Stadt ein.
Organisationsname (z.B. Firma) [Internet Widgits Pty Ltd]: <– Geben Sie Ihren Organisationsnamen ein (z.B. den Namen Ihres Unternehmens).
Organisatorische Einheit (z.B. Abteilung) []: <– Geben Sie den Namen Ihrer organisatorischen Einheit ein (z.B. “IT-Abteilung”).
Allgemeiner Name (z.B. IHR Name) []: <– Geben Sie den vollständig qualifizierten Domainnamen des Systems ein (z.B. “server1.example.com”).
E-Mail-Adresse []: <– Geben Sie Ihre E-Mail-Adresse ein.
Ändern Sie die Berechtigungen des SSL-Zertifikats:
chmod 600 /etc/ssl/private/pure-ftpd.pemStarten Sie schließlich PureFTPd neu:
systemctl restart pure-ftpd.serviceDas war’s. Sie können jetzt versuchen, sich mit Ihrem FTP-Client zu verbinden; Sie sollten jedoch Ihren FTP-Client so konfigurieren, dass er TLS verwendet - siehe das nächste Kapitel, wie Sie dies mit FileZilla tun können.
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.