68

最近、最新バージョンの 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
4

17 に答える 17

89

別の*fastcgi_param*のようなものを試してください

fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
于 2013-07-23T15:17:26.290 に答える
51

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

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

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

于 2014-04-07T19:18:48.470 に答える
12

おそらく答えるのが遅すぎるでしょうが、これは本当に迷惑なエラーなので、いくつかのことを教えてください。次のソリューションは、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
于 2015-07-12T03:21:10.387 に答える
11

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

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 Page Not Found エラーをスローします):

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-証明書

これが誰かの役に立てば幸いです。もし誰かがこれについてもっと知っているなら、私に知らせてください、ありがとう!

于 2019-05-02T20:37:00.970 に答える
2

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

sudo chmod -R 755 htmlfoldername

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

于 2015-05-04T23:12:36.740 に答える
1

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

于 2015-03-20T03:19:13.417 に答える
0

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

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

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

于 2016-11-20T08:13:03.767 に答える
0

私の場合:相対ディレクトリを使用しました

       location ~* \.(css|js)\.php$ {

            root ../dolibarr/htdocs;

            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

            fastcgi_param SCRIPT_NAME $fastcgi_script_name;
            fastcgi_index index.php;

             include /etc/nginx/fastcgi_params;
       }

この行も機能しませんでした:fastcgi_param SCRIPT_FILENAME /vagrant/www/p1/../p2/htdocs/core/js/lib_head.js.php;

fastcgi_paramだから私は相対パスをサポートしていないことを発見しました。

これは機能します

fastcgi_param SCRIPT_FILENAME /vagrant/www/p2/htdocs/core/js/lib_head.js.php;
于 2020-05-06T09:54:19.980 に答える