web-dev-qa-db-ja.com

NginxでPHPを実行するとファイルが見つかりません

最近、Nginxの最新バージョンをインストールしましたが、PHPを実行するのに苦労しているようです。

ドメインに使用している構成ファイルは次のとおりです。

server {
listen       80;
server_name  localhost;

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

error_page   500 502 503 504  /50x.html;
location = /50x.html {
    root   /usr/share/nginx/html;
}

location ~ \.php$ {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    include        fastcgi_params;
}

}

エラーログファイルに表示されるエラーは次のとおりです。

FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream
53
user2298995

別の* fastcgi_param *を試してください

fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
64
deagh

「ファイルが見つかりません」という問題が発生したため、「ルート」定義を「サーバー」ブラケットに移動して、すべての場所にデフォルト値を提供しました。任意の場所に独自のルートを指定することにより、いつでもこれをオーバーライドできます。

server {
    root /usr/share/nginx/www;
    location / {
            #root /usr/share/nginx/www;
    }

    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            include fastcgi_params;
    }
}

または、両方の場所でルートを定義することもできます。

41
dogatonic

おそらく答えるには遅すぎますが、これは本当に厄介なエラーであるため、いくつかのことがあります。次のソリューションはMac OS X Yosemiteで機能しました。

  1. あなたが持っている場合、それは最高です

fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name;

  1. 高速cgiパラメータを含むインクルードは、その行より上に移動する必要があります。

  2. 実行しているPHPファイル(そのファイルも含む)までのすべてのディレクトリには、a+xパーミッションが必要です。

Sudo chmod a+x /Users/
Sudo chmod a+x /Users/oleg/
Sudo chmod a+x /Users/oleg/www/
Sudo chmod a+x /Users/oleg/www/a.php
11
Oleg Berman

私は同じ問題を抱えていましたが、テスト中に両方の問題に直面しました:

1º:「ファイルが見つかりません」

そして

2º:404エラーページ

そして、私の場合、次のことがわかりました。

NginxボリュームとPHPボリュームの両方に、パブリックフォルダーのボリュームをマウントする必要がありました。

Nginxにマウントされ、PHPにマウントされていない場合、 「ファイルが見つかりません

例(「ファイルが見つかりません」エラーが表示されます):


services:
  php-fpm:
    build:
      context: ./docker/php-fpm
  nginx:
    build:
      context: ./docker/nginx
    volumes:
        #Nginx Global Configurations
      - ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./docker/nginx/conf.d/:/etc/nginx/conf.d

        #Nginx Configurations for you Sites:

        # - Nginx Server block
      - ./sites/example.com/site.conf:/etc/nginx/sites-available/example.com.conf
        # - Copy Public Folder:
      - ./sites/example.com/root/public/:/var/www/example.com/public
    ports:
      - "80:80"
      - "443:443"
    depends_on:
      - php-fpm
    restart: always

PHPにマウントされ、Nginxにマウントされていない場合、 404ページが見つかりませんエラーが表示されます。

例(404ページが見つかりませんエラーをスローします):

version: '3'

services:
  php-fpm:
    build:
      context: ./docker/php-fpm
    volumes:
      - ./sites/example.com/root/public/:/var/www/example.com/public
  nginx:
    build:
      context: ./docker/nginx
    volumes:
        #Nginx Global Configurations
      - ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./docker/nginx/conf.d/:/etc/nginx/conf.d

        #Nginx Configurations for you Sites:

        # - Nginx Server block
      - ./sites/example.com/site.conf:/etc/nginx/sites-available/example.com.conf
    ports:
      - "80:80"
      - "443:443"
    depends_on:
      - php-fpm
    restart: always

そして、これはうまく機能します(両側に取り付けます)(他のすべてが適切に構成されていて、あなたが私と同じ問題に直面していると仮定します):

version: '3'

services:
  php-fpm:
    build:
      context: ./docker/php-fpm
    volumes:
      # Mount PHP for Public Folder
      - ./sites/example.com/root/public/:/var/www/example.com/public
  nginx:
    build:
      context: ./docker/nginx
    volumes:
        #Nginx Global Configurations
      - ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./docker/nginx/conf.d/:/etc/nginx/conf.d

        #Nginx Configurations for you Sites:

        # - Nginx Server block
      - ./sites/example.com/site.conf:/etc/nginx/sites-available/example.com.conf
        # - Copy Public Folder:
      - ./sites/example.com/root/public/:/var/www/example.com/public
    ports:
      - "80:80"
      - "443:443"
    depends_on:
      - php-fpm
    restart: always

また、複数のサイトを提供するためのNginx/Phpを使用した完全に機能するサンプルプロジェクトもあります。 https://github.com/Pablo-Camara/simple-multi-site-docker-compose-nginx-Alpine-php-fpm -Alpine-https-ssl-certificates

これが誰かの助けになることを願っています、そして、これについてもっと知りたい人は私に知らせてください、ありがとう!

3
Pablo Camara

動作していない/ statusを次のコマンドでデバッグしようとして40分ほど費やしました。

$ SCRIPT_NAME=/status SCRIPT_FILENAME=/status QUERY_STRING= REQUEST_METHOD=GET cgi-fcgi -bind -connect /var/run/php5-fpm.sock

「ファイルが見つかりません」というエラーが発生しましたが、実際のスクリプト(ファイルシステムで見つかった)は正常に機能しました。

結局のところ、php5-fpmの孤立したプロセスがいくつかありました。すべてを削除してphp5-fpmを完全に再起動すると、正常に戻りました。

お役に立てれば。

3
Alex A.

私の場合、PHPスクリプト自体が404コードを返しました。 nginxとは何の関係もありませんでした。

2
PHZ.fi-Pharazon

私の場合は、ルートWebディレクトリのアクセス許可が正しく設定されていなかったためです。これを行うには、ターミナルでこれを実行するときに親フォルダーにいる必要があります。

Sudo chmod -R 755 htmlfoldername

これにより、htmlフォルダー内のすべてのファイルがchmodされます。これは、セキュリティ上の理由から実稼働には推奨されませんが、トラブルシューティング中に問題にならないように、そのフォルダー内のファイルを確認できます。

2
rncrtr

このエラーもありました。私の場合、同じルートディレクトリを指している別の仮想ホストがあったためです。

1
Sarcastron

PHP72にアップグレードした後、php-fpm.d/www.confでuser/groupの設定が失われ、このエラーが発生する問題がありました。セットアップにphp-fpmが含まれる場合は、それらを必ず確認してください。

1
Aepod

私にとって、問題はロケーションパスのタイプミスでした。

この種の問題を最初にチェックするかもしれません

プロジェクトへのパスです。

0
Stevan Tosic

「ファイルが見つかりません」を取得するとき、私の問題は、ngix configのこの行を指しているフォルダーにシンボリックリンクがないことでした:

root /var/www/claims/web;
0
Darius.V