OpenSUSE 42.1/Webserver

Aus Hyperweb & OpenSim
Wechseln zu: Suche

Webserver konfigurieren (optional)

Die auf dieser Seite beschriebenen Konfigurationsschritte sind nur erforderlich, wenn auf dem Server zusätzlich zu OpenSim noch ein regulärer Webserver betrieben werden soll. Im Gegensatz zum verbreiteten Apache ist die hier gewählte Lösung erheblich sparsamer im Ressourcenverbrauch, schließlich wollen wir primär OpenSim betreiben.

Auf hyperweb.eu wird der Webserver verwendet, um diese Homepage zu betreiben. Nur für serverseitig laufende Scripte wird PHP benötigt, hier zum Beispiel zur Kommunikation mit LSL Scripten und für die MediaWiki Software. (Statische Webseiten in HTML und JavaScript brauchen kein PHP.)

Voraussetzung

Nginx ist bereits installiert, siehe Paketauswahl. Falls Webseiten mit PHP-Scripten geplant sind, muss außerdem php5-fpm installiert sein. Die Konfiguration erfolgt als User "root".

Grundkonfiguration

Die nginx-Konfigurationsdatei öffnen und Einstellungen editieren:

vi /etc/nginx/nginx.conf

[...]
user nginx;
[...]
worker_processes 4;
[...]
keepalive_timeout 2;
[...]
server {
  listen 80 default_server;
  # activate next line for IPv6 support
  ###listen [::]:80 default_server ipv6only=on;

  # directory root of websites
  root /srv/www/htdocs;
  index index.php index.html index.htm index.xhtml;

  # make site accessible from all local domains
  server_name _;

  location / {
    if (!-e $request_filename) {
      # activate next line for feature "url mod-rewrite"
      ###rewrite ^/([^?]*)(?:\?(.*))? /index.php?title=$1&$2 last;
      # activate next line for normal mode without mod-rewrite
      return 404;
    }
    if ($uri ~* "\.(ico|css|js|gif|jpe?g|png|woff|svg|eot|ttf)(\?[0-9]+)?$") {
      expires max;
      break;
    }
  }

#  # pass the PHP scripts to FastCGI server
#  location ~ \.php$ {
#    if (!-e $request_filename) {
#      return 404;
#    }
#    # internal communication with php5-fpm over IP
#    fastcgi_pass 127.0.0.1:1234;
#    fastcgi_index index.php;
#    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#    include fastcgi_params;
#  }

  # deny access to .htaccess files, if Apache's document root concurs with nginx's one
  location ~ /\.ht {
    deny  all;
  }
}
[...]

Erläuterungen:

Für worker_processes wird im Web "4" empfohlen, für keepalive_timeout "2". Es ist empfehlenswert, den kompletten existierenden "server {...}" Block durch das hier gezeigte Beispiel zu ersetzen.

Der Webserver horcht auf Port 80, denn dort suchen Webbrowser standardmäßig. Optional kann IPv6 aktiviert werden durch Entfernen der Kommentarzeichen vor der zweiten "listen..." Zeile, natürlich nur wenn dein Server eine zusätzliche IPv6 Adresse hat. Der auf server_name _; folgende Scriptteil gilt für alle Domains auf diesem Server. Das Verzeichnis hinter root /srv/www/htdocs; zeigt als symbolischer Link zu dem Verzeichnis, in dem wir die Webseiten speichern (siehe weiter unten). index enthält eine Liste mit Namen für Startseiten, die bei fehlendem Seitennamen in der angegebenen Reihenfolge gesucht werden.

Falls das sogenannte mod rewrite Feature benötigt wird, zum Beispiel für kurze URLs in dynamisch generierten Webseiten, kann die auskommentierte Zeile mit "rewrite..." aktiviert werden. Anderenfalls aktiviere die Zeile mit "return 404" (hier aktiv) um eine Fehlerseite anzuzeigen. Der PHP Block ist hier auskommentiert; wenn PHP benötigt wird, siehe weiteres im nächsten Kapitel unten. Der Block am Schluss verhindert Hackerangriffe auf die Rechteverwaltung von Apache-Webservern, könnte deshalb hier eigentlich auch auskommentiert werden.

Dienst registrieren und erster Start

systemctl enable nginx.service
systemctl start nginx.service

Tests:
systemctl status nginx.service muss u.a. grün "running" anzeigen.
Aufruf der Domain des Servers im Browser muss eine Fehlerseite mit dem Text "403 Forbidden" anzeigen, und klein darunter "nginx/1.8.1"

Wartung vereinfachen

Aus Bequemlichkeit sollen Webseiten einfach vom eingeschränkten User hochgeladen werden, der sich remote einloggen darf (siehe SSH härten). Dafür richten wir in seinem Homeverzeichnis eine Wurzel für die Homepage ein.

cd /home/Beispieluser (ins Homeverzeichnis wechseln)
mkdir htdocs (neues Unterverzeichnis anlegen für die Webseiten)
chown Beispieluser htdocs (neuer Besitzer Beispieluser)
chgrp users htdocs (neue Benutzergruppe users)

Nun legen wir einen symbolischen Link auf das neue Verzeichnis, damit wir nicht in den ganzen Konfigurationsdateien die Pfade ändern müssen.

cd /srv/www
rm -rf htdocs (Verzeichnis mit allen Inhalten löschen)
ln -s /home/Beispieluser/htdocs htdocs (symbolischen Link setzen)

Test:
Eine neue Verbindung zum Server aufbauen, mit dem Account Beispieluser. Eine HTML-Seite mit Namen index.htm oder index.html in das Verzeichnis htdocs hochladen. Beispiel:

<html>
  <body>
    Meine erste Webseite! :-)
  </body>
</html>

Aufruf der Domain des Servers im Browser muss den Text der Webseite anzeigen.

Hinweis: Wer eine statische Webseite nur mit HTML und JavaScript (ohne PHP-Scripte) betreiben will, ist hier fertig!

Konfiguration von PHP (optional)

Die folgenden Konfigurationsschritte sind nur erforderlich, wenn die geplanten Webseiten serverseitige Scripte in der Sprache PHP ausführen sollen. Statische HTML-Seiten oder solche mit JavaScript (was im Browser der Anwenders läuft) brauchen kein PHP.

Einrichten von php-fpm

Die Beispiel-Konfigurationsdatei kopieren:
cp /etc/php5/fpm/php-fpm.conf.default /etc/php5/fpm/php-fpm.conf

Rechte des PHP Session Verzeichnisses anpassen (drwx-wx-wt):
chmod 1733 /var/lib/php5

PHP-Konfigurationsdatei öffnen und vier Einstellungen beispielsweise wie folgt editieren:
vi /etc/php5/fpm/php-fpm.conf

 [...]
 pm.max_children = 10
 [...]
 pm.start_servers = 5
 [...]
 pm.min_spare_servers = 5
 [...]
 pm.max_spare_servers = 10
 [...]

Dienst anmelden und erster Start

systemctl enable php-fpm.service
systemctl start php-fpm.service

Tests:
systemctl status php-fpm.service muss u.a. grün "running" anzeigen.
netstat -tapn zeigt eine Liste aktiver Internetverbindungen, dort muss nginx auf Port 80 und und php-fpm auf Port 9000 horchen.

Achtung! OpenSim darf während dieser Tests nicht laufen, denn OpenSim benutzt (zumindest nach dieser Anleitung) ebenfalls Port 9000! Was zuerst startet, hat gewonnen, das andere stürzt ab.

Kommunikation auf einen freien Port umstellen

Nach dem ersten Test wieder die PHP-Konfigurationsdatei öffnen. Zukünftig soll der PHP-Dienst auf einen freien TCP-Port umgeschaltet werden.
vi /etc/php5/fpm/php-fpm.conf

 [...]
 listen = 127.0.0.1:1234
 [...]

Hinweis: Hier im Beispiel wird der als frei angenommene Port 1234 verwendet. In der Firewall sollte der Port nicht geöffnet werden, weil die Daten nur zwischen zwei Programmen im selben Rechner ausgetauscht werden.

nginx mit php-fpm verknüpfen

Die nginx-Konfigurationsdatei öffnen und den angezeigten Bereich aktivieren, der im oben besprochenen Beispiel noch auskommentiert war:

vi /etc/nginx/nginx.conf

  # pass the PHP scripts to FastCGI server
  location ~ \.php$ {
    if (!-e $request_filename) {
      return 404;
    }
    # internal communication with php5-fpm over IP
    fastcgi_pass 127.0.0.1:1234;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
  }

Erläuterungen:

Der auf location ~ \.php$ folgende Block wird nur aufgerufen, wenn die Webseite die klein geschriebene Dateiendung .php hat. fastcgi_pass 127.0.0.1:1234; ist die Verbindung zu php5-fpm. Wenn ein Pfad ohne Dateinamen angegeben wird, soll nach index.php gesucht werden. Auf fastcgi_param SCRIPT_FILENAME folgen Variablen, die zusammen den absoluten Pfad zur aufgerufenen Webseite ergeben. Schließlich wird noch eine weitere Konfigurationsdatei includiert, die in dieser Anleitung unbeachtet übernommen wird.

Neustart der Dienste, damit die Einstellungen übernommen werden

systemctl restart php-fpm.service
systemctl restart nginx.service

Tests:
systemctl status php-fpm.service muss u.a. grün "running" anzeigen.
systemctl status nginx.service muss u.a. grün "running" anzeigen.
Das folgende PHP-Script z.B. mit Namen info.php in das Verzeichnis htdocs hochladen und im Browser aufrufen:

 <?php
 phpinfo();
 ?>

Wenn im Browser folgende Tabelle mit unzähligen Daten des Servers angezeigt wird, ist die Konfiguration erfolgreich abgeschlossen.


Viel Spaß beim Scripten!



Weiter: Online-Updates