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

15

Eu tenho procurado por aí, 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;
}

OR / AND

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

Obrigado!

    
por Van Nguyen 16.10.2013 / 11:11

2 respostas

8

Eu descobri que, a partir de nginx 1.6.2, pelo menos, 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;
}

ou seja: não se deve especificar o protocolo http:// antes de referenciar o backend do php. A sintaxe http://php deve ser usada com a instrução proxy_pass , não fastcgi_pass .

    
por 08.02.2015 / 13:12
16

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

upstream define os 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, assim:

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 aqui:

link

    
por 16.10.2013 / 12:14