对于 php-fpm,使用upstream和location有什么区别?

对于 php-fpm,使用upstream和location有什么区别?

我一直在寻找,但找不到直接的答案,如果有人可以澄清这一点,将不胜感激,谢谢!

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

谢谢!

答案1

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

答案2

我发现,nginx至少从 1.6.2 开始,位置块的工作语法对我来说是:

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

http://即:在引用 php 后端之前不应指定协议。http://php语法应与指令一起使用proxy_pass,而不是fastcgi_pass

相关内容