Qual é a diferença entre usar upstream e local para php-fpm?

18

Estive pesquisando, mas não consegui encontrar uma resposta direta, se alguém pudesse esclarecer isso, seria muito apreciado, obrigado!

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

OU E?

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

Obrigado!

Van Nguyen
fonte

Respostas:

9

Eu descobri que, nginxpelo menos na versão 1.6.2, a sintaxe de trabalho para mim para o bloco de localização é:

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

isto é: não se deve especificar o http://protocolo antes de referenciar o back-end php. A http://phpsintaxe deve ser usada com a proxy_passinstrução, não fastcgi_pass.

Weeblr
fonte
23

location é usado para corresponder expressões e criar regras para elas.

upstream define servidores que podem ser referenciados.

No seu exemplo, isso significa que você deseja obter um equivalente para

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

você precisaria

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

O benefício do bloco upstream é que você pode configurar mais de um servidor / porta / serviço como upstream e distribuir o tráfego neles, por exemplo:

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

Você pode encontrar mais informações sobre isso na documentação do nginx:

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

etagenklo
fonte
Você precisa de ip_hash para PHP? E o keepalive?
precisa saber é o seguinte
11
Em fastcgi_pass php;vez disso, deveria ser #
rhgb 23/02