Apa perbedaan antara menggunakan upstream dan lokasi untuk php-fpm?

18

Saya telah mencari-cari tetapi tidak dapat menemukan jawaban langsung, jika seseorang dapat menjelaskan ini, akan sangat dihargai, terima kasih!

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

ATAU DAN?

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

Terima kasih!

Van Nguyen
sumber

Jawaban:

9

Saya telah menemukan bahwa, nginxsetidaknya untuk 1.6.2, sintaks yang berfungsi untuk saya untuk blok lokasi adalah:

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

yaitu: seseorang tidak boleh menentukan http://protokol sebelum mereferensikan backend php. The http://phpsintaks untuk digunakan dengan proxy_passinstruksi, tidak fastcgi_pass.

Weeblr
sumber
23

location digunakan untuk mencocokkan ekspresi dan membuat aturan untuk mereka.

upstream mendefinisikan server yang dapat dirujuk.

Dalam contoh Anda ini berarti jika Anda ingin mendapatkan yang setara untuk

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

, kamu akan membutuhkan

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

Keuntungan dari blok upstream adalah Anda dapat mengkonfigurasi lebih dari satu server / port / layanan sebagai upstream dan mendistribusikan lalu lintas pada mereka, misalnya seperti ini:

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

Anda dapat menemukan informasi lebih lanjut tentang ini di dokumentasi nginx:

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

etagenklo
sumber
Apakah Anda perlu ip_hash untuk PHP? Bagaimana dengan keepalive?
CMCDragonkai
1
Seharusnya fastcgi_pass php;sebaliknya
rhgb