Soluzione 1:
location
viene utilizzato per abbinare le espressioni e creare regole per esse.
upstream
definisce i server a cui è possibile fare riferimento.
Nel tuo esempio questo significa se vuoi ottenere un equivalente per
location ~ \.php$ {
try_files $uri = 404;
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
, avresti bisogno di
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;
}
Il vantaggio del blocco upstream è che puoi configurare più di un server/porta/servizio come upstream e distribuire il traffico su di essi, ad esempio in questo modo:
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;
}
Puoi trovare maggiori informazioni al riguardo nella documentazione di nginx:
http://nginx.org/en/docs/http/ngx_http_upstream_module.html
Soluzione 2:
L'ho trovato, a partire da nginx
1.6.2 almeno, la sintassi funzionante per me per il blocco di posizione è:
location ~ \.php$ {
try_files $uri = 404;
fastcgi_pass php;
fastcgi_index index.php;
include fastcgi.conf;
}
cioè:non si dovrebbe specificare il http://
protocol prima di fare riferimento al backend php. Il http://php
la sintassi deve essere utilizzata con il proxy_pass
istruzione, non fastcgi_pass
.