web-dev-qa-db-ja.com

nginxおよびphp-fpm「プライマリスクリプトが不明です」

複製のようなにおいがするのは知っていますが、今はこのセットアップを5回以上試しましたが、これを機能させることができません。ほとんどの設定はchrootやマルチサーバーなどで複雑ですが、これを可能な限り単純な設定に減らしました。 nginxでfpmが最も簡単な形式でどのように設定されているかを理解したいのですが...ご容赦ください。

現在の設定:

  • CentOS 7 64ビット
  • nginxリポジトリからのnginx 1.8.0
  • remi php56のphp 5.6

/etc/nginx/conf.d/default.confへの追加

    location ~ \.php$ {
      fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
      fastcgi_index  index.php;
      fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include        fastcgi_params;
    }

/etc/php-fpm.d/www.confへの追加と変更

listen = /var/run/php-fpm/php-fpm.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

/usr/share/nginx/html/info.phpファイルを追加しました

<?php phpinfo();?>

両方のサービスを開始

systemctl start nginx.service
systemctl start php-fpm.service

そして最後にtail -f /var/log/nginx/error.log

2015/11/09 12:18:01 [エラー] 28638#0:* 1 FastCGIがstderrに送信されました: "Primary script unknown"アップストリームからの応答ヘッダーの読み取り中に、クライアント:xx.xxx.xxx .xxx、サーバー:localhost、リクエスト: "GET /info.php HTTP/1.1"、アップストリーム: "fastcgi:// unix:/var/run/php-fpm/php-fpm.sock:"、ホスト: "xxx .xx.xxx.xx」

したがって、FPMはスクリプトを見つけることができないようです。これだけは理解できましたが、構成によると、スクリプトファイル名はドキュメントルートとスクリプト名です。スクリプト名はinfo.phpで、デフォルトの設定によると、ルートパスは次のとおりです。

    location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
}

したがって、これを手動で連結すると、

/usr/share/nginx/html/info.php

そしてこのファイルは存在します

#ls -lah /usr/share/nginx/html/
total 20K
drwxr-xr-x 2 root root  4.0K Nov  9 12:35 .
drwxr-xr-x 3 root root  4.0K Apr 21  2015 ..
-rw-r--r-- 1 root root   537 Apr 21  2015 50x.html
-rw-r--r-- 1 root root   612 Apr 21  2015 index.html
-rw-r--r-- 1 root nginx   20 Nov  9 10:45 info.php

これがうまくいかない理由を誰かが私に説明できますか?

5
Adesso

$document_rootは、同じ場所または親コンテナー内のrootディレクティブからその値を取得する必要があります。兄弟コンテナでrootが定義されているようです。 rootserverコンテナーに移動します。

3
Richard Smith