Ubuntu 14.04/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

Im Web wird empfohlen, zur Performanceverbesserung in der nginx-Konfigurationsdatei eine Einstellung zu editieren:
vi /etc/nginx/nginx.conf

keepalive_timeout 2

Jetzt eine neue Webseiten-Konfigurationsdatei erstellen:
vi /etc/nginx/sites-available/MyWebsite

server {
  listen 80 default_server;
  # aktiviere die nächste Zeile für IPv6 support
  ###listen [::]:80 default_server ipv6only=on;

  # Wurzelverzeichnis der Webseiten, ggf. anpassen
  root /var/www;
  index index.php index.html index.htm index.xhtml;

  # Webseiten für alle Domains erreichbar machen
  server_name _;

  location / {
    if (!-e $request_filename) {
      # aktiviere die nächste Zeile für "url mod-rewrite"
      ###rewrite ^/([^?]*)(?:\?(.*))? /index.php?title=$1&$2 last;
      # aktiviere die nächste Zeile für Normalbetrieb ohne mod-rewrite
      return 404;
    }
    if ($uri ~* "\.(ico|css|js|gif|jpe?g|png|woff|svg|eot|ttf)(\?[0-9]+)?$") {
      expires max;
      break;
    }
  }

  # PHP Scripte ans FastCGI weitergeben, der Server horcht
  # wahlweise auf Unix-Socket (default) oder 127.0.0.1:8888
# location ~ \.php$ {
#   if (!-e $request_filename) {
#     return 404;
#   }
#   # Interne Kommunikation mit php5-fpm über Unix-Socket
#   fastcgi_pass   unix:/var/run/php5-fpm.sock;
#   # Alternative: Interne Kommunikation mit php5-fpm über IP
#   ###fastcgi_pass   127.0.0.1:8888;
#   fastcgi_index  index.php;
#   fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
#   include   fastcgi_params;
# }

  # verweigere Zugang zu Apache .htaccess Dateien
  location ~ /\.ht {
    deny  all;
  }
}

Im Verzeichnis /etc/nginx/sites-enabled den Link auf "default" löschen und einen neuen Link auf eigene Konfiguration anlegen:

cd /etc/nginx/sites-enabled/
rm default
ln -s ../sites-available/MyWebsite

Die neue Konfiguration laden und den Service neu starten:

service nginx reload

Erläuterungen:

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 /var/www; 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.

Tests:
service nginx status muss u.a. "running" anzeigen.
Aufruf der Domain des Servers im Browser muss eine Fehlerseite mit dem Text "403 Forbidden" anzeigen, und klein darunter "nginx/1.4.6" (bzw. die aktuell installierte Version).

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 /var
rm -rf www (Verzeichnis www mit allen Inhalten löschen)
ln -s /home/Beispieluser/htdocs www (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/pool.d/www.conf /etc/php5/fpm/pool.d/www.conf.orig

Rechte des PHP Session Verzeichnisses kontrollieren (drwx-wx-wt) und ggf. mit dem Befehl chmod 1733 /var/lib/php5 anpassen.

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

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

Dienst erstmalig starten

service php5-fpm restart

Test:
service php5-fpm status muss u.a. "running" anzeigen.

nginx mit php-fpm verknüpfen

Die vorhin selbsterstellte nginx Konfigurationsdatei (im Beispiel "MyWebsite") öffnen und den angezeigten Bereich aktivieren, der im oben besprochenen Beispiel noch auskommentiert war:

vi /etc/nginx/sites-available/MyWebsite

[...]
location ~ \.php$ {
  if (!-e $request_filename) {
    return 404;
  }
  # Interne Kommunikation mit php5-fpm über Unix-Socket
  fastcgi_pass   unix:/var/run/php5-fpm.sock;
  # Alternative: Interne Kommunikation mit php5-fpm über IP
  ###fastcgi_pass   127.0.0.1:8888;
  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. Entweder fastcgi_pass unix:/tmp/php5-fpm.sock; ist die oben eingerichtete Unix Socketverbindung, oder alternativ fastcgi_pass 127.0.0.1:8888; als Fallback, falls Unix Sockets nicht funktionieren (Fallbacklösung siehe unten). 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

service php5-fpm restart
service nginx restart

Tests:
service php5-fpm status muss u.a. "running" anzeigen.
service nginx status muss u.a. "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. (Hier angezeigte Versionsnummer und Daten nur beispielhaft.)


Viel Spaß beim Scripten!

Fallback: Kommunikation von Unix-Socket auf einen freien Port umstellen

Die Unix Socketverbindung ist performanter, aber auf manchen Rechnern will sie einfach nicht laufen. Es gibt noch eine weitere Methode, den Webserver mit dem PHP Service zu verbinden, nämlich einen internen Port. Aus Sicherheitsgründen sollte er von außen nicht sichtbar sein.

Dafür wieder die PHP-Konfigurationsdatei öffnen, und die Zeile "listen" von php5-fpm.sock auf einen freien Port umstellen, hier 8888 als Beispiel.
vi /etc/php5/fpm/pool.d/www.conf

 [...]
 ; listen = /var/run/php5-fpm.sock
 listen = 127.0.0.1:8888
 [...]

Selbstverständlich muss diese Änderung auch dem Webserver mitgeteilt werden, was wiederum in der vorhin selbsterstellten Konfigurationsdatei geschieht (im Beispiel "MyWebsite"): vi /etc/nginx/sites-available/MyWebsite

[...]
# Interne Kommunikation mit php5-fpm über Unix-Socket
###fastcgi_pass   unix:/var/run/php5-fpm.sock;
# Alternative: Interne Kommunikation mit php5-fpm über IP
fastcgi_pass   127.0.0.1:8888;
[...]



Weiter: Online-Updates