Was ist der Unterschied zwischen der Verwendung von Upstream und Standort für PHP-FPM?

18

Ich habe mich umgesehen, konnte aber keine eindeutige Antwort finden. Wenn jemand dies bitte klären könnte, wäre ich sehr dankbar, danke!

location ~ \.php$ {
    try_files      $uri = 404;
    fastcgi_pass   unix:/run/php-fpm/php-fpm.sock;
    fastcgi_index  index.php;
    include        fastcgi.conf;
}

ODER UND?

upstream php {
    server         unix:/run/php-fpm/php-fpm.sock;
}

Vielen Dank!

Van Nguyen
quelle

Antworten:

9

Ich habe festgestellt, dass nginxzumindest ab 1.6.2 die Arbeitssyntax für den Standortblock für mich wie folgt lautet:

location ~ \.php$ {
    try_files      $uri = 404;
    fastcgi_pass   php;
    fastcgi_index  index.php;
    include        fastcgi.conf;
}

das heißt: man sollte das http://protokoll nicht spezifizieren , bevor man auf das php backend verweist. Die http://phpSyntax soll mit der proxy_passAnweisung verwendet werden, nicht fastcgi_pass.

Weeblr
quelle
23

location wird verwendet, um Ausdrücke abzugleichen und Regeln für sie zu erstellen.

upstream Definiert Server, auf die verwiesen werden kann.

In Ihrem Beispiel bedeutet dies, dass Sie ein Äquivalent für erhalten möchten

location ~ \.php$ {
    try_files      $uri = 404;
    fastcgi_pass   unix:/run/php-fpm/php-fpm.sock;
    fastcgi_index  index.php;
    include        fastcgi.conf;
}

, du bräuchtest

upstream php {
    server         unix:/run/php-fpm/php-fpm.sock;
}
location ~ \.php$ {
    try_files      $uri = 404;
    fastcgi_pass   php;
    fastcgi_index  index.php;
    include        fastcgi.conf;
}

Der Vorteil des Upstream-Blocks besteht darin, dass Sie mehr als einen Server / Port / Service als Upstream konfigurieren und den Datenverkehr auf diese verteilen können. Beispiel:

upstream php {
    server 127.0.0.1:8080       max_fails=3 fail_timeout=30s;
    server 192.68.1.2     weight=5;
    server         unix:/run/php-fpm/php-fpm.sock;
}

Weitere Informationen hierzu finden Sie in der nginx-Dokumentation:

http://nginx.org/en/docs/http/ngx_http_upstream_module.html

etagenklo
quelle
Benötigen Sie ip_hash für PHP? Was ist mit Keepalive?
CMCDragonkai
1
Es sollte fastcgi_pass php;stattdessen
rhgb sein