¿Cuál es la diferencia entre usar upstream y location para php-fpm?

18

He estado buscando pero no pude encontrar una respuesta directa, si alguien pudiera aclarar esto, sería muy apreciado, ¡gracias!

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

¿O Y?

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

¡Gracias!

Van Nguyen
fuente

Respuestas:

9

He descubierto que, nginxal menos desde 1.6.2, la sintaxis de trabajo para mí para el bloque de ubicación es:

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

es decir: no se debe especificar el http://protocolo antes de hacer referencia al backend de php. La http://phpsintaxis se debe utilizar con la proxy_passinstrucción, no fastcgi_pass.

Weeblr
fuente
23

location se usa para unir expresiones y crear reglas para ellas.

upstream define servidores a los que se puede hacer referencia.

En su ejemplo, esto significa que si desea obtener un equivalente para

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

necesitarías

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

El beneficio del bloque ascendente es que puede configurar más de un servidor / puerto / servicio como ascendente y distribuir el tráfico en ellos, por ejemplo de esta manera:

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

Puede encontrar más información sobre esto en la documentación de nginx:

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

etagenklo
fuente
¿Necesitas ip_hash para PHP? ¿Qué hay de keepalive?
CMCDragonkai
1
Debería ser fastcgi_pass php;en su lugar
rhgb