Nginx und verschiedene Versionen von PHP FPM + PHP

Nginx und verschiedene Versionen von PHP FPM + PHP

Aufgrund eines besseren Verständnisses dessen, was ich erreichen möchte, dankMarkierenund sein vorherigerAntwort, ich poste eine (hoffentlich) klarere und etwas andere Variante meiner vorherigen Frage, da dieser Thread den Sättigungspunkt erreicht hat;

Ich versuche, mehrere WordPress-Sites auf einem Nginx-Server laufen zu lassen, wobei jede Site eine andere PHP-Version erfordert. Dies möchte ich erreichen, indem ich mehrere Versionen von PHP-FPM verwende, die jeweils eine andere PHP-Version ausführen, getrennt von Nginx.

Ich möchte dann .confDateien verwenden, um zu steuern, welchen PHP-FPM-Server jede Site verwendet, damit die Site mit der gewünschten PHP-Version ausgeführt werden kann.(Gemäß derKommentareAbschnitt)

Derzeit sieht mein Serverblock für Testsite1 so aus und führt die Standard-PHP-Version aus.

server {
    listen 80;
    listen [::]:80;

    root /usr/share/nginx/html/testsite1;
    index index.php index.html index.htm;

    server_name local.testsite1.com;

    location / {
        try_files $uri $uri/ /index.php?q=$uri&$args;
    }

    error_page 404 /404.html;

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi.conf;
    }
}

Dieser befindet sich in /var/nginx/sites-available/testsite1und ist symbolisch verknüpft mit /var/nginx/sites-enabled/testsite1. Jeder Serverblock befindet sich in einer separaten Datei innerhalbsites-available

testsite1
testsite2
testsite3

Ich habe eine andere Version von PHP (5.3.3) kompiliert, bin mir aber nicht sicher, wie ich mehrere PHP-FPM-Server einrichte und wie ich jeden auf eine andere PHP-Version „verweisen“ lasse. Ich brauche auch eine Anleitung, wie ich mehrere .confDateien einrichte, um festzulegen, welchen PHP-FPM-Server jede WordPress-Site verwenden soll.

(im Grunde brauche ich während des gesamten Prozesses Hilfe ...)

Antwort1

Meiner Erfahrung nach reicht für Ihren Fall eine einfache Serverstruktur wie die folgende aus.

Annahme

Für die Einrichtung haben Sie etwa zwei Stunden Zeit.

Annahme zur Serverumgebung

1 x Nginx-Server (Frontend, zur Verarbeitung statischer Dateien)

2 x PHP-FPM-Server (Back-End, zur Verarbeitung von PHP-Skripten)

1 x Datenbankserver (entweder auf einem anderen separaten Server oder auf einem Nginx-Server ist ok)

Der Zugriff auf den Nginx-Server erfolgt überÖffentliches NetzwerkUndPrivates Netzwerk

Auf PHP-FPM-Server und DB-Server kann nur über den Nginx-Server zugegriffen werden (Privates Netzwerk)

Öffentliches Netzwerk, was bedeutet, dass der Zugriff für Personen mit Internetzugang möglich ist.

Privates Netzwerk, die in einer bestimmten Netzwerkgruppe angezeigt werden. (Klasse A, Klasse B, Klasse C. B. 192.xx.xx.xx oder 10.xx.xx.xx oder 172.xxx.xxx.xxx)

Wenn Sie VPS auf Linode und DigitalOcean verwenden (beide bieten private Netzwerk-IPs) können Sie den dort bereitgestellten Anweisungen zum Einrichten folgen.

Wenn nicht, können Sie Ihre eigeneVPN (virtuelles privates Netzwerk)oder verwenden Sie Ihren Router, um einen zu erstellen. Das ist ganz einfach: Sie können bei GOOGEL alles suchen, was Sie benötigen.

Wenn Sie Ubuntu verwenden, dauert die Erstellung eines VPN mit Konfiguration weniger als 5 Minuten.

Bevor Sie den nächsten Schritt ausführen, sollten Sie die Firewall-Regeln einrichten, um potenzielle Angriffe zu verhindern. (Mithilfe von IPTABLES oder dessen Wrapper FirewallD)

Obwohl wir PHP-FPM als dediziertes Nginx-Paket erstellen, können die PHP-Dateien von Websites nicht gleichzeitig über den TCP-Port und den Unix-Socket übergeben werden.

Daher müssen Sie Ihren Stammordner für den Webserver verwalten.

Optionen zum Verwalten des Website-Ordners

  1. Hochladen Ihrer Websites auf Nginx-Server UND PHP-FPM-Server mit dem GLEICHEN Ordnerpfad

  2. Schreiben Sie ein Skript zum Synchronisieren von Dateien auf alle Ihre Server

  3. Verwenden Sie GIT für alle Ihre Server.

  4. Erstellen eines NFS (Network File System) auf Nginx oder einem anderen dedizierten Server

Wenn Sie ein *nix-System verwenden, empfehle ich die vierte Option, da

Verwalten Sie zunächst alle Dateien Ihrer Websites auf einem Server

Zweitens, sehr leicht zu pflegen

Drittens: Backup in Minuten (das sollte eine andere Frage sein)

※ Der NFS-Server fungiert als reiner Speicherserver für Ihre Websites

Manche Leute sind möglicherweise der Meinung, dass die Verwendung von NFS zu Netzwerklatenz führt. Für die Verwaltung mehrerer Websites ist NFS jedoch eine effiziente und einfache Methode.

Sie können bei Google nach „NFS unter Linux“ suchen, um die Installation und Konfiguration dieses Schritts abzuschließen. Bei neueren Versionen dauert es etwa eine Stunde.

Beachten Sie jedoch, dass sich der NFS-Server in einemPrivates Netzwerksowie.

Wenn NFS, PHP-FPM und Nginx beide im selbenPrivates Netzwerk, die Netzwerklatenz sollte geringer sein.

Dann konfigurieren wir dienginx.conf

Annahme

Ihre öffentliche Nginx-IP ist 202.123.abc.abc, hören Sie 80 (oder 443, wenn SSL aktiviert ist)

Ihr PHP-FPM 5.5 ist auf 192.168.5.5, hören Sie 9008

Ihr PHP-FPM 5.6 ist auf 192.168.5.6, hören Sie 9008

(weiteres Beispiel) Ihr HHVM 3.4 befindet sich auf 192.168.5.7, hören Sie 9008

Und Sie denken, dass PHP 5.5 Ihre am häufigsten verwendete PHP-Version ist

    server {

         listen 80 default server;
         server_name frontend.yourhost.ltd;
         #root PATH is where you mount your NFS
         root /home/www;   
         index index.php;

    location ~ \.php$ {
        try_files  $uri $uri/ = 404;
        fastcgi_pass   192.168.5.5:9008;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param  PHP_VALUE  open_basedir=$document_root:/tmp/:/proc/;
        include fastcgi_params;
        fastcgi_buffer_size 512k;
        fastcgi_buffers 256 4k;
        fastcgi_busy_buffers_size 512k;
        fastcgi_temp_file_write_size 512k;
        fastcgi_intercept_errors on;

    }

    }
#Here to set up you vhosts
include vhosts/*.conf; 

Die obigen Zeilen sollten vor die letzte gesetzt werden}

Erstellen Sie dann einen Ordner namens vhostsim Ordner vonnginx.conf

Annahme

Sie haben eine andere Anwendung, die PHP 5.6 verwendet

Sie haben eine andere Anwendung, die HHVM verwendet

Für PHP 5.6 (vhosts/app1.conf)

       server {
         server_name app1.yourhost.ltd;
         listen 202.123.abc.abc:80;
         index index.php;
         #root PATH is where you mount your NFS
         root /home/app1;
         #Include your rewrite rules here if needed
         include rewrite/app1.conf;

         location ~ \.php($|/){
             try_files  $uri $uri/ = 404;

             fastcgi_pass   192.168.5.6:9008;
             fastcgi_index  index.php;
             include        fastcgi_params;
             set $path_info "";
             set $real_script_name $fastcgi_script_name;
               if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
                   set $real_script_name $1;
                   set $path_info $2;
                }
             fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
             fastcgi_param SCRIPT_NAME $real_script_name;
             fastcgi_param PATH_INFO $path_info;
            fastcgi_param  PHP_VALUE         open_basedir=$document$
         }
      location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
                    expires      30d;
      }

       location ~ .*\.(js|css)?$ {
                    expires      12h;
       }

        access_log  /var/wwwlog/app1/access.log access;
        error_log  /var/wwwlog/app1/error.log error;
     }

Für HHVM (vhosts/app2.conf)

       server {
         server_name app2.yourhost.ltd;
         listen 202.123.abc.abc:80;
         index index.php;
         #root PATH is where you mount your NFS
         root /home/app2;
         #Include your rewrite rules here if needed
         include rewrite/app2.conf;

         location ~ \.hh($|/){
             try_files  $uri $uri/ = 404;

             fastcgi_pass   192.168.5.7:9008;
             fastcgi_index  index.hh;
             include        fastcgi_params;
             set $path_info "";
             set $real_script_name $fastcgi_script_name;
               if ($fastcgi_script_name ~ "^(.+?\.hh)(/.+)$") {
                   set $real_script_name $1;
                   set $path_info $2;
                }
             fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
             fastcgi_param SCRIPT_NAME $real_script_name;
             fastcgi_param PATH_INFO $path_info;
             fastcgi_param  PHP_VALUE         open_basedir=$document$
         }
      location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
                    expires      30d;
      }

       location ~ .*\.(js|css)?$ {
                    expires      12h;
       }

        access_log  /var/wwwlog/app2/access.log access;
        error_log  /var/wwwlog/app2/error.log error;
     }

Auf diese Weise können Sie sogar verschiedene SSL-Zertifikate für Ihre virtuellen Hosts hinzufügen.

Starten Sie Ihren Server neu und viel Spaß!

BEARBEITET

Um verschiedene Versionen von PHP-FPM zu installieren, können Sie es selbst kompilieren oder den vorhandenen Stack verwenden.

Empfehlen Sie https://github.com/centos-bz/EZHTTP/archive/master.zip , Ihre Zeit zu sparen

Methode verwenden (Vorausgesetzt, auf Ihrem Computer sind WGET und UNZIP installiert)

$ wget --kein-Check-Zertifikathttps://github.com/centos-z/EZHTTP/archive/master.zip?time=$(Datum +%s) -O server.zip

$ entpacken Sie server.zip

$ cd EZHTTP-Master

$ chmod +x start.sh

$ ./start.sh

Wählen Sie 1 im ersten Bildschirm

Wählen Sie 1 im zweiten Bildschirm (LNMP)

Wählen Sie 1, wenn Sie gefragt werden, welche Version von Nginx Sie installieren möchten (nicht installieren).

Wählen Sie 1, wenn Sie gefragt werden, welche Version von MySQL Sie installieren möchten (nicht installieren).

Wählen Sie die gewünschte Version aus, wenn Sie gefragt werden, welche PHP-Version Sie installieren möchten

Alle Einstellungen bleiben auf den Standardeinstellungen (damit Sie PHP-FPM in Zukunft einfacher verwalten können)

Wählen Sie aus, welche zusätzlichen Erweiterungen Sie möchten. Sie können diese natürlich ignorieren, da alle allgemeinen Erweiterungen später installiert werden.

Lassen Sie diese Shell mit der Kompilierung beginnen!

verwandte Informationen