web-dev-qa-db-ja.com

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

ありがとう!

19
Van Nguyen

nginx 1.6.2以降、ロケーションブロックの構文は次のとおりです。

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

つまり、phpバックエンドを参照する前にhttp://プロトコルを指定しないでください。 http://php構文は、proxy_passではなくfastcgi_pass命令で使用されます。

9
Weeblr

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

24
etagenklo