web-dev-qa-db-ja.com

PHP7.0-FPMとNginxはUNIXソケットを使用すると機能しません

ウェブに記載されていないトラブルがあります。 VPS Debian 8 Nginx + PHP7.0-FPMを使用しています。私のサーバーはphp-filesをソースコードで提供し、NginxとPHP7.0-FPMがnix socketsを使用するように構成すると、それらをコンパイルしません。接続)。

つまり、私が実際に行っていることと機能しないこと

  1. / etc/nginx/fastcgi_paramsを編集して、UNIXソケットファイルを使用するようにfastcgi_passパラメータをコメント化します。
#fastcgi_pass    127.0.0.1:9000;

すべてのホストにこのファイルが含まれているため、各ホストファイルに独自のソケットを設定する必要があります。私はそれをこのようにします:

  1. /etc/nginx/sites-available/example.comを編集しますそこでfastcgi_passパラメータを入力します
location ~ '\.php$|^/update.php' {
fastcgi_split_path_info ^(.+?\.php)(|/.*)$;
fastcgi_pass      unix:/var/run/php/example.com.php7.0-fpm.conf;
        include             /etc/nginx/fastcgi_params;

        fastcgi_param       SCRIPT_FILENAME     /var/www/example.com/www$fastcgi_script_name;
        fastcgi_param       DOCUMENT_ROOT       /var/www/example.com/www;

        fastcgi_param       PHP_ADMIN_VALUE     upload_tmp_dir=/var/www/example.com/tmp/upload;
        fastcgi_param       PHP_ADMIN_VALUE     session.save_path=/var/www/example.com/tmp/sessions;
    }
  1. メインのphp7.0-fpmプールファイル/etc/php/7.0/fpm/pool.d/www.confを編集してソケットをリッスンします(ただし、ここでなぜ必要なのか理解できません)。

    listen = /var/run/php/php7.0-fpm.sock

  2. 私のサイトのプールファイル/etc/php/7.0/fpm/pool.d/example.com.confを編集して、独自のソケットを設定します(ここで私は必要だと思います):

    listen = /var/run/php/example.com.php7.0-fpm.sock

  3. サービスを再起動します。

    サービスnginx再起動&&サービスphp7.0-fpm再起動

これにより、任意のサイトページにアクセスしたときのように、index.phpがダウンロードされます。

しかし、tcpソケットを使用する場合、fastcgi_pass 127.0.0.1:9000;正常に動作します。

2
tlito

過度に複雑なlocationはどうなっていますか?

location ~ '\.php$|^/update.php' {

あなたのリクエストは実際にはこれと一致しないと思います。

本当に必要なのは:

location ~ \.php$ {
2
Michael Hampton

fastcgi_passのファイル名が間違っているようです:

fastcgi_pass      unix:/var/run/php/example.com.php7.0-fpm.sock;

Php-fpmが実行中であり、ソケットファイルが存在し、nginxがファイルにアクセスするための適切な権限を持っていることを確認してください。 selinuxをインストールして適用している場合は、ログをチェックして、nginxによるファイルへのアクセスがブロックされていないかどうかを確認する必要がある場合もあります。

Php-fpm側では、pool.dのこれらの構成ファイルはそれぞれ、PHP実行可能ファイルの個別のプールであり、それぞれに独自のソケットが必要です。www.confは「メイン」ではありません"構成ファイル。これは完全に独立したプロセスのプールであり、使用しない場合は無効化または削除する必要があります。両方のプールが同じソケットを使用するように構成されているため、ここで競合が発生します。

2
DerfK

Unixソケットには権限があります

Phpとnginxを接続するソケットは、設定に従ってphp7.2-fpmサービスによって作成されます

Sudo nano /etc/php/7.2/fpm/pool.d/www.conf

このファイルは

listen = /run/php/php7.2-fpm.sock
listen.owner = www-data
listen.group = www-data

このサービスを開始/再開すると

Sudo systemctl restart php7.2-fpm.service

指定された所有者とグループでソケットを表すファイルを作成します

ls -la /run/php

しかし、Nginxはデフォルトで別のユーザーを使用しています、あなたはそれを検証することができます

Sudo nano /etc/nginx/nginx.conf

ユーザーnginx;

権限をどのように調整するかは、あなた次第です。ソケットファイルにより多くのアクセス許可を与えるか、リッスンユーザーを変更するか、nginxユーザーを変更します。答えを選択します。

0