Linux

php-fpm 使用上游和位置有什麼區別?

  • May 30, 2019

我一直在尋找,但找不到直接的答案,如果有人能澄清這一點,將不勝感激,謝謝!

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

或/與?

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

謝謝!

我發現,nginx至少從 1.6.2 開始,location 塊的工作語法是:

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

也就是說:http://在引用 php 後端之前不應該指定協議。語法將http://phpproxy_pass指令一起使用,而不是fastcgi_pass.

location用於匹配表達式並為它們創建規則。

upstream定義可以引用的伺服器。

在您的範例中,這意味著如果您想獲得等效的

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

,你需要

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

上游塊的好處是您可以將多個伺服器/埠/服務配置為上游並在它們上分配流量,例如:

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

您可以在 nginx 文件中找到有關此的更多資訊:

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

引用自:https://serverfault.com/questions/546349