В чем разница между использованием upstream и location для 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;
}

И / ИЛИ?

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

Благодарность!

Ван нгуен
источник

Ответы:

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.

Weeblr
источник
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

etagenklo
источник
Вам нужен ip_hash для PHP? Как насчет keepalive?
CMCDragonkai
1
Это должно быть fastcgi_pass php;вместо этого
rhgb