Hosten Sie mehrere VHosts mit unterschiedlichen Benutzern in Nginx

Das Normalste auf der Welt, wenn Sie einen Server haben, ist, über Sicherheit und mehr Sicherheit nachzudenken. Sie können niemals paranoid genug sein

Eine etwas übliche Praxis und NICHTS empfohlen, ist es, für alle Datenbanken denselben Benutzer zu verwenden, schlimmer noch, wenn root verwendet wird, was so unglaublich es auch scheinen mag, es gibt diejenigen, die (aufgrund von Landstreichern oder Unwissenheit) mach das, ich habe schon darüber gesprochen, warum du NICHT so handeln sollst in ein weiterer BeitragJetzt ist es Zeit zu erklären, wie und warum es besser ist, die Webserververarbeitung in verschiedene Benutzer zu trennen, diesmal wird sie verwendet Nginx.

DedicatedServer_SubImage

Was ist das von Benutzern und Webservern?

Um es kurz und einfach zu erklären, muss der Webserver (Apache, Nginx, was auch immer) Prozesse im System öffnen, Prozesse, die die Dateien von der Festplatte (Bilder usw.) nehmen und erstellen verfügbar für den Browser des Kunden. Der Webserver kann die Dateien nicht einfach nehmen und manipulieren, da er niemand ist. Das heißt, er benötigt einen Benutzer, der am Ende all dies erledigt, und dieser Benutzer ist derjenige, über den ich spreche. Ist das verstanden?

Was bedeutet es, mehrere Benutzer zu trennen?

Angenommen, wir haben auf unserem Server zwei Websites, unsere ist ein persönliches Projekt und eine andere (Stellen wir uns vor, es ist unsere Freundin oder unser Bruder). Selbst wenn wir separate Datenbanken und unterschiedliche Benutzer verwenden, um darauf zuzugreifen, werden die Dateien beider Websites letztendlich von demselben Benutzer bearbeitet. Die PHP-Verarbeitung wird für alle Websites von demselben Benutzer verwaltet (Es handelt sich normalerweise um WWW-Daten). Dies ist eine nicht empfohlene Vorgehensweise. Es ist besser, alles gut voneinander zu trennen, wie ein altes Sprichwort sagt. Es ist besser, auf Nummer sicher zu gehen.

Ok, ich verstehe, wie mache ich das mit Nginx?

2000px-Nginx_logo.svg

Das erste, was zu beachten ist, ist, dass Nginx kein eigenes Modul hat, das die PHP-Verarbeitung wie Apache handhabt. Für Nginx müssen wir PHP-CGI oder PHP-FPM verwenden, das genauso gut (oder besser) funktioniert wie Apache. Um die PHP-Verarbeitung zwischen verschiedenen Benutzern zu trennen, müssen wir die Zeilen in den PHP-Konfigurationsdateien (CGI oder FPM) ändern, nicht in Nginx selbst.

Angenommen, Sie verwenden PHP-FPMwerden wir eine Konfigurationsdatei von erstellen Pool Für eine bestimmte Site, dh einen Pool, ist die Möglichkeit, die PHP-Verarbeitung von PHP-FPM zu trennen, aber wir gehen in Teilen vor.

1. Zuerst müssen wir wissen, welchen Benutzer des Systems wir verwenden werden. Ich gehe davon aus, dass wir noch keine erstellt haben, und nun, lassen Sie es uns erstellen:

Alle folgenden Befehle MÜSSEN mit Administratorrechten ausgeführt werden, entweder mit direktem Root oder mit sudo

adduser blog

Wir beginnen den normalen Prozess des Erstellens eines Benutzers, geben das Passwort ein usw.

Ich blogge den Benutzer, nur um dem Beispiel zu folgen, dass die erste Site, die wir hosten werden, ein Blog sein wird, also ... um jeden Benutzer zu kennen, mit dem die Site verwandt ist

1. Gehen wir zuerst zu /etc/php5/fpm/pool.d/:

cd /etc/php5/fpm/pool.d/

2. Jetzt erstellen wir eine Datei namens blog.conf:

touch blog.conf

3. Jetzt legen wir die Konfiguration des Pools fest, den wir für den VHost-Blog verwenden werden:

Bearbeiten Sie die Datei blog.conf mit nano ... zum Beispiel: sudo nanoblog.conf
[Blog] user = Blog
Gruppe = Blog
listen = / var / run / php5-fpm-Blog.sock listen.owner = Blog
hör.gruppe = Blog
pm = ondemand pm.max_children = 96 chdir = /

Hinweis: Was ich sie rot markiere, ist das, was sie je nach dem zuvor erstellten Benutzer ändern müssen. Zum Beispiel, wenn sie einen anderen VHost mit einem anderen Benutzer erstellen (Forum zum Beispiel) dann statt blog einfach Forum in jede der Zeilen setzen, wird das nicht verstanden?

4. Sobald die Konfiguration des neuen Pools (Die blog.conf-Datei, die wir gerade erstellt und bearbeitet haben) ist es an der Zeit, den Nginx VHost anzuweisen, für diesen VHost eine andere Socke für diese Site zu verwenden. Die Socke, die verwendet wird, ist die zuvor deklarierte (/var/run/php5-fpm-blog.sock). Lassen Sie uns den Nginx VHost bearbeiten und im PHP-Verarbeitungsteil geben wir an, diese Socken zu verwenden. Zum Beispiel:

location ~ \ .php $ {if (! -f $ request_filename) {return 404; }}
fastcgi_pass unix: / var / run / php5-fpm-Blog.Socke;
include fastcgi_params; fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name; fastcgi_read_timeout 300; }}

Wie Sie sehen können, gebe ich an, dass die PHP-Verarbeitung dieses VHost (Diese Zeilen befinden sich beispielsweise in / etc / nginx / sites-enabled / vhost-blog) Mach es mit den Socken in /var/run/php5-fpm-blog.sock ... die wir zuvor beim Bearbeiten von /etc/php5/fpm/pool.d/blog.conf erstellt haben ... wird das nicht verstanden ?

5. Sobald dies erledigt ist, starten wir beide Dienste (php5-fpm und nginx) und voila neu. Wir werden sehen, dass die Verarbeitung dieser Site (vhost) NICHT von www-data oder root oder ähnlichem erfolgt, sondern von dem Benutzer, den wir zuvor definiert.

Hier zeige ich Ihnen die Ausgabe von a ps aux | grep fpm auf einem der Server meines Knotens:

ps aux | grep fpm ebook 586 0.0 0.0 349360 1204? S Mar30 0:00 php-fpm: pool ebook ebook 589 0.0 0.0 349360 1204? S Mar30 0:00 php-fpm: pool ebook www 608 0.0 0.2 350084 5008? S Mar30 0:00 php-fpm: pool www www 609 0.0 0.2 350600 5048 30? S Mar0 00:3 php-fpm: pool www tv611 0.0 0.0 349360 1204 30? S Mar0 00:3 php-fpm: pool tv3 tv615 0.0 0.0 349360 1204 30? S Mar0 00:3 php-fpm: pool tv1818 magazine 1.7 1.7 437576 36396 09? S 55:0 46:2264 php-fpm: pool magazine magazine 1.9 1.7 437332 35884 10? S 15:0 26:2338 php-fpm: Schüler des Poolmagazins 4.3 1.0 428992 22196 10? S 18:0 53:2413 php-fpm: Pool Schüler Magazin 1.8 1.7 437764 36152 10? S 22:0 18:2754 php-fpm: pool gutl magazine 3.5 1.3 356724 27164 10? S 38:0 00:5624 php-fpm: pool gutl cgr 0.0 1.0 365168 22696 28? S Apr0 16:7900 php-fpm: Pool-Cgr-Schüler 0.3 2.5 457052 52444 25? S 20. April 23:11021 php-fpm: Pool Schüler Schüler 0.4 2.5 458316 52864 28? S 5. April 57:11254 php-fpm: Pool Schüler cgr 0.0 1.0 363152 21708 28? S Apr0 12:13184 php-fpm: pool cgr cgr 0.0 1.0 362872 21360 28? S Apr0 08:XNUMX php-fpm: pool cgr

Wie Sie sehen können ... ist die Trennung der PHP-Verarbeitung durch Benutzer mit Nginx + PHP-FPM sehr einfach. Dort sehen Sie, dass es mehrere Pools gibt, da es mehrere Benutzer gibt.

Schlussfolgerungen

Wenn es um Server geht, sind Sie nie paranoid genug ... Sicherheit ist nichts, mit dem man spielen kann. Je mehr wir immer versuchen, die Sicherheit unserer Server und ihrer Dienste zu verbessern, desto weniger werden wir Angst vor einem (erfolgreichen) Server haben. Hackversuch oder ähnliches 😉


Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: Miguel Ángel Gatón
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.

  1.   Dhunter sagte

    Gaara, in der heutigen Zeit sollten diese Dinge so weit wie möglich automatisiert werden. Ich empfehle Ihnen, Ansible auszuprobieren. Ohne Agent benötigen Sie nur Python auf dem Remote-Host, sehr einfach zu konfigurieren, Yaml-Dateien, Jinja-Vorlagen.

    https://github.com/ansible/ansible-examples/tree/master/wordpress-nginx

    1.    KZKG ^ Gaara sagte

      Mal sehen, das ist nicht immer nur für WordPress-Sites und ... haha, vielleicht klickt Ansible auf volao, aber ich möchte lieber genau wissen, wie alles auf dem Server funktioniert, selbst wenn ich 1 Minute damit verbringen muss, neue Socken und neue zu erstellen VHost 😀

      1.    Dhunter sagte

        Mit Ansible automatisieren Sie alles, Sie tun praktisch alles, was Sie wollen. Der Vorteil dieser Methode besteht darin, dass Sie die Praxis kapseln und dann nach Belieben ausführen. Stellen Sie sich vor, Sie haben eine stark ausgelastete Site und möchten einen Lastausgleich zwischen Anwendungsservern durchführen. Dies muss sein genau gleich konfiguriert Sie können keinen Schritt überspringen oder etwas anderes in einem von ihnen tun. Können Sie sich vorstellen, die Prozedur Schritt für Schritt 4 Mal auszuführen? Mit Ansible ist es so einfach wie das Hinzufügen des Hostnamens zur Inventardatei und Voilá !!

        http://www.ansible.com/how-ansible-works

      2.    Dhunter sagte

        Es tut uns leid wegen des Ansible-Kultes, aber es ist eine dieser Technologien, die Sie entdecken, und Sie möchten, dass jeder sie jetzt verwendet, weil sie so cool und praktisch ist, als würden Sie NGINX entdecken und möchten, dass alle Ihre Freunde Apache sofort verlassen.

        https://speakerdeck.com/slok/ansible-all-the-things

  2.   mstaaravin sagte
  3.   rots87 sagte

    Ich bin (oder studiere, um zu sein) ein Entwickler und mit NGIX hatte ich viele Probleme bei der Konfiguration von nginx + php-fpm. Ich weiß, dass die Archlinux-Distribution nicht die beste ist, um daraus einen Server zu machen, aber jedes Mal, wenn ich eine Version von Ngix oder PHP aktualisierte, stürzte alles ab, so dass ich den Versuch aufgab, lol ... Für heute blieb ich beim klassischen Apache + PHP aber ich werde sehen, ob ich wieder um NGIX herum gehe ... vielleicht in einer virtuellen Maschine

    1.    Dhunter sagte

      Die Mentalität ändert sich ein wenig, Nginx dient dem statischen Inhalt und dient als Reverse-Proxy für die PHP-Fpm, die das echte PHP ausführt. Sie müssen in Teilen beginnen und die Bereitstellung Schritt für Schritt durchführen. Suchen Sie nach einer Anleitung für die Bereitstellung In dem Framework, mit dem Sie arbeiten, hat jedes seine Details anhand der Namen der Öffentlichkeit, der statischen Daten, der Ressourcen usw.

  4.   anonym sagte

    Tun Sie der Gemeinde den großen Gefallen, das Wort "Hostear" aufzugeben, das es nicht gibt. Bei Gott, ist es so schwierig, "Gastgeber" zu sagen?

  5.   Wil sagte

    Grüße, nach Ihrem Beispiel würde ich gerne wissen, ob ein Pool nur für das WordPress-Backen erstellt werden kann, dh für den wp-admin, der einen neuen Socket für eingehende Verbindungen zum Backend erstellt

    location / wp-admin {
    root /var/www/yoursite.com/wp-admin;
    index index.php index.html index.htm;
    Speicherort ~ ^ / wp-admin /(.+. php) $ {
    try_files $ uri = 404;
    root /var/www/yoursite.com/wp-admin;
    schließen Sie / etc / nginx / fastcgi_params;

    fastcgi_pass server unix:/run/php5-fpm2.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_buffer_size 128k;
    fastcgi_buffers 256 4k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;
    fastcgi_read_timeout 1240;
    }
    location ~* ^/wp-admin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
    root /var/www/tusitio.com/wp-admin/;
    }
    }