Qual è la differenza tra l'utilizzo di upstream e la posizione per php-fpm?


18

Ho cercato in giro ma non sono riuscito a trovare una risposta diretta, se qualcuno potesse chiarire per favore, sarebbe molto apprezzato, grazie!

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

O / E?

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

Grazie!

Risposte:


9

Ho scoperto che, nginxalmeno dalla 1.6.2, la sintassi funzionante per me per il blocco posizione è:

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

cioè: non si dovrebbe specificare il http://protocollo prima di fare riferimento al back-end php. La http://phpsintassi deve essere utilizzata con l' proxy_passistruzione, non fastcgi_pass.


23

location viene utilizzato per abbinare le espressioni e creare regole per esse.

upstream definisce i server a cui è possibile fare riferimento.

Nel tuo esempio questo significa se vuoi ottenere un equivalente per

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

, avresti bisogno

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;
}

Il vantaggio del blocco upstream è che è possibile configurare più di un server / porta / servizio come upstream e distribuire il traffico su di essi, ad esempio in questo modo:

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;
}

Puoi trovare maggiori informazioni al riguardo nella documentazione di nginx:

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


Hai bisogno di ip_hash per PHP? Che dire di keepalive?
CMCDragonkai,

1
Dovrebbe essere fastcgi_pass php;invece
rhgb
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.