Solution 1 :
location
est utilisé pour faire correspondre des expressions et créer des règles pour elles.
upstream
définit les serveurs qui peuvent être référencés.
Dans votre exemple, cela signifie si vous voulez 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 répartir 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
Solution 2 :
J'ai trouvé que, depuis nginx
1.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. Le http://php
la syntaxe doit être utilisée avec le proxy_pass
instruction, pas fastcgi_pass
.