将上游和位置用于php-fpm有什么区别?


18

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

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

OR / AND?

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

谢谢!

Answers:


9

我发现,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


23

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


您是否需要ip_hash for PHP?那keepalive呢?
CMCDragonkai 2014年

1
应该fastcgi_pass php;改为
rhgb
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.