В чем разница между использованием upstream и location для php-fpm?
Я искал вокруг, но не мог найти прямой ответ, если кто-то может уточнить это, будет очень признателен, спасибо!
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;
}
Спасибо!
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
,
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: