最近、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
別の* fastcgi_param *を試してください
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
「ファイルが見つかりません」という問題が発生したため、「ルート」定義を「サーバー」ブラケットに移動して、すべての場所にデフォルト値を提供しました。任意の場所に独自のルートを指定することにより、いつでもこれをオーバーライドできます。
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;
}
}
または、両方の場所でルートを定義することもできます。
おそらく答えるには遅すぎますが、これは本当に厄介なエラーであるため、いくつかのことがあります。次のソリューションはMac OS X Yosemiteで機能しました。
fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name;
高速cgiパラメータを含むインクルードは、その行より上に移動する必要があります。
実行している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
私は同じ問題を抱えていましたが、テスト中に両方の問題に直面しました:
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
これが誰かの助けになることを願っています、そして、これについてもっと知りたい人は私に知らせてください、ありがとう!
動作していない/ 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を完全に再起動すると、正常に戻りました。
お役に立てれば。
私の場合、PHPスクリプト自体が404コードを返しました。 nginxとは何の関係もありませんでした。
私の場合は、ルートWebディレクトリのアクセス許可が正しく設定されていなかったためです。これを行うには、ターミナルでこれを実行するときに親フォルダーにいる必要があります。
Sudo chmod -R 755 htmlfoldername
これにより、htmlフォルダー内のすべてのファイルがchmodされます。これは、セキュリティ上の理由から実稼働には推奨されませんが、トラブルシューティング中に問題にならないように、そのフォルダー内のファイルを確認できます。
このエラーもありました。私の場合、同じルートディレクトリを指している別の仮想ホストがあったためです。
PHP72にアップグレードした後、php-fpm.d/www.confでuser/groupの設定が失われ、このエラーが発生する問題がありました。セットアップにphp-fpmが含まれる場合は、それらを必ず確認してください。
私にとって、問題はロケーションパスのタイプミスでした。
この種の問題を最初にチェックするかもしれません
プロジェクトへのパスです。
「ファイルが見つかりません」を取得するとき、私の問題は、ngix configのこの行を指しているフォルダーにシンボリックリンクがないことでした:
root /var/www/claims/web;