Quelle est la différence entre l'utilisation en amont et l'emplacement pour php-fpm?

18

J'ai cherché autour mais je n'ai pas trouvé de réponse directe, si quelqu'un pouvait clarifier cela, ce serait grandement apprécié, merci!

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

OU ET?

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

Merci!

Van Nguyen
la source

Réponses:

9

J'ai constaté que, à partir de nginx1.6.2 au moins, la syntaxe de travail pour moi pour le bloc d'emplacement est:

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

c'est-à-dire: il ne faut pas spécifier le http://protocole avant de référencer le backend php. La http://phpsyntaxe doit être utilisée avec l' proxy_passinstruction, non fastcgi_pass.

Weeblr
la source
23

location est utilisé pour faire correspondre les expressions et créer des règles pour celles-ci.

upstream définit les serveurs auxquels il est possible de se référer.

Dans votre exemple, cela signifie que si vous souhaitez obtenir un équivalent pour

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

, vous auriez besoin

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

L'avantage du bloc en amont est que vous pouvez configurer plusieurs serveurs / ports / services en amont et distribuer le trafic sur eux, par exemple comme ceci:

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

Vous pouvez trouver plus d'informations à ce sujet dans la documentation nginx:

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

etagenklo
la source
Avez-vous besoin d'ip_hash pour PHP? Et Keepalive?
CMCDragonkai
1
Ce devrait fastcgi_pass php;plutôt être
rhgb