BEARBEITEN:Zum Nachschlagen
Ich verwende Ubuntu 14.10 mit einem LEMP-Stack und PHP 5.5.12. Ich habe eine Reihe älterer WordPress-Sites, die PHP 5.3.3 erfordern, sowie einige WP-Sites, die eine relativ neue Version von PHP verwenden und alle auf nginx laufen.auf meinem lokalen Rechner.
In Bezug auf virtuelle Maschinen und Sandboxen sind mir die Hände gebunden, ich kann nur mit nginx spielen, daher diese Frage. Ich verstehe die Sicherheitsbedenken der Leute, aber ich muss diese Sites lokal ausführen, damit ich sie auf defekte Funktionen testen kann, während ich sie auf die neuesten PHP-/WP-Versionen aktualisiere.
Ich möchte, dass nginx je nach WordPress-Site die richtige Version von PHP ausführt (mit php-fpm). Lautein andererSF-Frage: Eine Möglichkeit, dies zu erreichen, besteht darin, die verschiedenen PHP-Versionen auf separaten Ports/Sockets auszuführen und die Nginx-Serverblöcke so zu konfigurieren, dass sie den jeweiligen Port/Socket verwenden.
Ich habe PHP 5.3.3 manuell kompiliert, um php-fpm einzuschließen, aber weiter bin ich nicht gekommen.
Tatsächlich möchte ich, dass jemand mir das etwas genauer erklärtDasAntwort. Ich weiß nicht genau, wie ich„Führen Sie jede Version von php-fpm auf einem anderen Port (oder Socket) aus.“oder„Konfigurieren Sie den entsprechenden Port in Ihrem Fastcgi_pass-Parameter in Ihrem Nginx-Serverblock.“.
Einer meiner Serverblöcke sieht zur Referenz so 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;
}
}
BEARBEITEN:
Ich habe jede Site mit einem separaten Serverblock in einer separaten Datei eingerichtet, die durch einen symbolischen Link zwischen /var/nginx/sites-available/testsite1
und verknüpft ist /var/nginx/sites-enabled/testsite1
. var/nginx/sites-available
Enthält also:
testsite1
testsite2
testsite3
...
Alsoim IdealfallIch habe mich gefragt, ob so etwas wie das Folgende möglich ist (da dies der Einrichtung von Apache mit verschiedenen PHP-Versionen ähnelt).
testsite1 – Ausführen einer älteren PHP-Version
server {
listen 80;
listen [::]:80;
root /usr/share/nginx/html/testsite1;
index index.php index.html index.htm;
server_name local.testsite1.com;
...settings to use older PHP version...
...remaining nginx settings...
}
testsite2 - aktuelle PHP-Version wird ausgeführt
server {
listen 80;
listen [::]:80;
root /usr/share/nginx/html/testsite2;
index index.php index.html index.htm;
server_name local.testsite2.com;
...settings to use currrent PHP version (if needed)...
...remaining nginx settings...
}
Ist das möglich? Der Grund für meine Frage ist, dass ich es lieber vermeiden möchte, alle meine php
Dateien umzubenennen, um php2
sie ausführen zu können (was die Versionskontrolle mühsam machen würde). Mir macht das Bearbeiten der nginx.conf
Datei oder die dazu erforderlichen Schritte nichts aus, solange ich keine Dateien umbenennen muss.
ich auchglaubenIch muss aufgrund von WordPress Sockets statt Ports verwenden (fastcgi_pass unix:/var/run/php5-fpm.sock;)
(bin aber für alle Vorschläge offen).
Antwort1
Okay, Sie möchten mehrere PHP-Versionen über nginx ausführen. Die Konfigurationsdatei sollte den spezifischen Pfad enthalten, in dem Sie Ihre PHP-Skripte in verschiedenen Versionen oder Erweiterungsnamen ablegen.
Ich möchte jedoch den in Ihrem Beitrag angegebenen Link zur SF-Frage erläutern.
Diese Antwort bietet Ihnen die Möglichkeit, conf
Ihre zu ändern nginx
. Dabei wird vorausgesetzt, dass der Fragesteller über Hintergrundwissen in verfügt nginx
.
Durch die Angabe eines bestimmten Ports conf
sorgt Nginx dafür, dass das Skript über diesen FastCGI-Kanal ausgeführt wird.
port
Nehmen wir an, Sie haben eine andere PHP-Version auf Ihrem Server installiert und diese in geändert php-fpm.conf
.
Sie möchten, dass alle php
Dateien in der Version 5.5.0
und php2
alle Dateien in ausgeführt werden 5.6.0
.
Beispielkonfiguration von Nginx wie folgt:
listen 8080;
server_name localhost;
root html;
location / {
index index.php index.php2;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME "${document_root}${fastcgi_script_name}";
include fastcgi_params;
}
location ~ \.php2$ {
fastcgi_pass 127.0.0.1:9001;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME "${document_root}${fastcgi_script_name}";
include fastcgi_params;
}
In diesem Fall php
wird über den Hafen verarbeitet 9000
und php2
geht an9001
Dies ist nur ein einfaches Beispiel. Für Fortgeschrittene: Sie können zwei unterschiedliche Ordner erstellen, um beispielsweise PHP-Dateien zu speichern, /home/php55
und /home/php56
dann Ihre bearbeiten nginx.conf
.
FÜR IHRE BEARBEITETE FRAGE
Wenn Sie versuchen möchten, verschiedene Server hinzuzufügen, um die Skripte in unterschiedlichen Versionen zu verarbeiten, können Sie das natürlich tun, da Nginx als Lastenausgleich fungieren kann und auch mit dieser Art von Problemen umgehen kann.
Erste Anwendung
server{
listen 80;
server_name php1.localhost;
root /home/www/php5.5;
location / {
index index.php;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9002; (You can change it to your private IP in the future)
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Zweite Anwendung
server{
listen 80;
server_name php2.localhost;
root /home/www/php5.6;
location / {
index index.php;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9004; (You can change it to your private IP in the future)
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Mit der obigen Konfiguration können Sie problemlos zwischen den verschiedenen Versionsergebnissen des PHP-Skripts wechseln. Darüber hinaus können Sie NFS (wenn Sie sich in einer *nix-Umgebung befinden) zum Mounten der Festplatte verwenden. In diesem Fall müssen Sie die Dateien nicht manuell in zwei Ordnern ablegen.
Was die Fastcgi-Übergabemethode betrifft, empfehle ich die Verwendung von PORT statt Socket.
Wir alle wissen, dass Unix Socket eine bessere Leistung hat, da der TCP-Port den gesamten Netzwerkstapel verwendet, sogar auf derselben Maschine.
Allerdings ist die Zeitersparnis sehr gering. Außerdem kann dieses Problem auftreten, wenn Sie Socket zu Zeiten mit hohem Datenverkehr verwenden.
connect() zu unix:/var/run/php5-fpm.sock ist fehlgeschlagen oderapr_socket_recv: Verbindung vom Peer zurückgesetzt (104)
Darüber hinaus kann Ihnen der TCP-Port eine schnellere Verwaltung ermöglichen, wenn Sie Nginx und PHP-FPM auf getrennten Servern platzieren.
Ich verwende einen kleinen Laptop, um diesen Beitrag zu bearbeiten, daher sind die Codes nicht schön, aber ich habe es versucht …
BEARBEITET
Denken Sie daran, Ihren /etc/hosts
so zu ändern, dass er Ihrem Hostnamen entspricht (Servername in nginx.conf
).
Antwort2
Zu Testzwecken wollte ich meinen nginx so konfigurieren, dass er an verschiedenen Stellen im gleichen Serverbereich unterschiedliche PHP-Versionen verwendet. Schließlich hat es so geklappt:
#Folder to run some tests with the new php-7
location ~ "^\/test_php7.0.3\/.*\.php$" {
try_files $uri =404;
fastcgi_pass unix:/var/run/php7-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
#Folder to run some tests with a custom compiled version of php5.6
location ~ "^\/test_php5.6.18\/.*\.php$" {
try_files $uri =404;
fastcgi_pass unix:/var/run/php56-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
#The default php version:
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Hoffe, das hilft jemand anderem :)