Php5-fpmでnginxサーバーをセットアップしました。サイトを読み込もうとすると、エラーのない空白のページが表示されます。 Htmlページは正常に提供されますが、phpは提供されません。 php.iniでdisplay_errorsを有効にしようとしましたが、うまくいきませんでした。 php5-fpm.logはエラーを生成せず、nginxも生成しません。
nginx.conf
server {
listen 80;
root /home/mike/www/606club;
index index.php index.html;
server_name mikeglaz.com www.mikeglaz.com;
error_log /var/log/nginx/error.log;
location ~ \.php$ {
#fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
編集
ここに私のnginxエラーログがあります:
2013/03/15 03:52:55 [error] 1020#0: *55 open() "/home/mike/www/606club/robots.txt" failed (2: No such file or directory), client: 199.30.20.40, server: mikeglaz.com, request: "GET /robots.txt HTTP/1.1", Host: "mikeglaz.com"
参考のために、.php
拡張子を持つファイルをキャッチするためにlocation
ブロックをアタッチしています:
location ~ \.php$ {
include /path/to/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}
/path/to/fastcgi-params
を再確認し、nginxユーザーが存在し、読み取り可能であることを確認してください。
取り替える
include fastcgi_params;
と
include fastcgi.conf;
nginx.confのfastcgi_param SCRIPT_FILENAME ...を削除します
また、この問題があり、最終的に解決策を見つけました here 。要するに、nginx fastcgi設定ファイル(Ubuntu 12.04の/ etc/nginx/fastcgi_params)に次の行を追加する必要があります
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
nginx + php-fpmを使用しているときに表示される空白ページの解決策を見つけることを期待して、多くのユーザーがこのスレッドに該当します。これは、ここでの回答の多くと自分の調査(php7.2に更新された)を読んだ後、私がやったことの要約です。
1)/etc/php/7.2/fpm/pool.d/www.conf
を開き、パラメーターlisten
の値を確認します。
listen = /var/run/php/php7.2-fpm.sock
2)パラメーターlisten
は、サイト構成ファイルのfastcgi_pass
パラメーターと一致する必要があります(つまり、/etc/nginx/sites-enabled/default
)。
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
3)ファイルが実際に存在することを確認します。
$ file /var/run/php/php7.2-fpm.sock
/var/run/php/php7.2-fpm.sock: socket
4)存在しない場合、php7.2-fpmが実行されていないため、再起動する必要があります。
$ Sudo /etc/init.d/php7.2-fpm restart
[ ok ] Restarting php7.2-fpm (via systemctl): php7.2-fpm.service.
/etc/nginx/sites-enabled/default
のlocation
セクションに関して:
# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
ファイルsnippets/fastcgi-php.conf
がロケーション/etc/nginx/
に存在することを確認します。
$ file /etc/nginx/snippets/fastcgi-php.conf
/etc/nginx/snippets/fastcgi-php.conf: ASCII text
このファイルには、php7.2-fpmで必要な変数定義のリストが含まれています。変数は、直接または個別のファイルのインクルードを通じて定義されます。
include fastcgi.conf;
このファイルは/etc/nginx/fastcgi.conf
にあり、次のようになります。
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
...
fastcgi_param REDIRECT_STATUS 200;
nginxには2つのパラメータファイルが含まれます:fastcgi_paramsおよびfastcgi.conf。両者の違いは、変数SCRIPT_FILENAME
の定義です:
$ diff fastcgi_params fastcgi.conf
1a2
> fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
長い話を短くするには、fastcgi.confは常に機能するはずです。何らかの理由でfastcgi_paramsを使用して設定している場合、SCRIPT_FILENAME
を定義する必要があります。
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
次に、nginx設定を再読み込みします。
$ Sudo nginx -s reload
そして、PHPファイルが正しく表示されることを確認します。例えば:
/ var/www/html/test.php
<pre><?php var_export($_SERVER)?></pre>
ここで、/var/www/html
はドキュメントルートへのパスです。
それでも、空のファイルが表示される場合は、php.ini
でshort_open_tag
が有効になっていることを確認してください(短いタグでPHPページをテストする場合)。
これが/ etc/nginx/fastcgi_paramsにあることを確認してください
fastcgi_param SCRIPT_FILENAME $ request_filename;
なぜこれがまだないのか誰が知っていますか?これは集合的に浪費しなければならない時間です!
NginxからfastCGIアプリケーションに渡される環境変数を返す短いCプログラムを作成しました。
#include <stdlib.h>
#include <fcgi_stdio.h>
extern char **environ;
int main(int argc, char **argv) {
char *envvar;
int i;
int count = 0;
while(FCGI_Accept() >= 0) {
printf("Content-type: text/html\n\n"
"<html><head><title>FastCGI Call Debug Tool</title></head>\n"
"<body><h1>FastCGI Call Debugging Tool</h1>\n"
"<p>Request number %d running on Host <i>%s</i></p>\n"
"<h2>Environment Variables</h2><p>\n",
++count, getenv("SERVER_NAME"));
i = 0;
envvar = environ[i];
while (envvar != NULL) {
printf("%s<br/>",envvar);
envvar = environ[++i];
}
printf("</p></body></html>\n");
}
return 0;
}
これをファイルに保存します、例えばfcgi_debug.c
コンパイルするには、まずgcc
とlibfcgi-dev
をインストールしてから、次を実行します。
gcc -o fcgi_debug fcgi_debug.c -lfcgi
実行するには、spawn-fcgi
をインストールしてから実行します:
spawn-fcgi -p 3000 -f /path/to/fcgi_debug
次に、デバッグプログラムを指すようにnginx fcgi設定を変更します。
fastcgi_pass 127.0.0.1:3000;
Nginxを再起動し、ページを更新すると、すべてのパラメーターがブラウザーに表示され、デバッグできるようになります。 :-)
これらのヒントは、Ubuntu 14.04 LTSのインストールに役立ちました。
さらに、short_open_tag
で/etc/php5/fpm/php.ini
をオンにする必要がありました
$ Sudo kate /etc/php5/fpm/php.ini
short_open_tag = On
$ Sudo service php5-fpm restart
$ Sudo service nginx reload
これを/etc/nginx/conf.d/default.conf
に追加します:
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
誰かがこの問題を抱えているが、上記の答えのどれもが問題を解決しない場合、私はこの同じ問題を抱えていて、設定ファイルが正しく、ngnixとphp-fpmジョブが正常に実行されていたので、それを追跡するのに苦労しましたエラーログを通じてエラーが発生することはありませんでした。
間抜けな間違いですが、short_open_tag = Off
に設定されたphp.iniファイルのShort Open Tag変数をチェックしたことがありません。私のphpファイルは<?
ではなく<?php
を使用していたため、ページは空白で表示されていました。私の場合、Short Open TagはOn
に設定されているはずです。
これが誰かを助けることを願っています。
この問題が発生する理由は、nginxのfastcgi構成が必要に応じて機能せず、所定の場所または処理でHTMLデータとして応答するためです。この問題を回避するためにnginxを設定できる方法は2つあります。
方法1:
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# With php5-fpm:
fastcgi_pass unix:/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
方法2:
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include snippets/fastcgi-php.conf;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
}
どちらの方法も適切に機能します。先に進み、いずれかを使用できます。ほとんど同じ操作を実行しますが、わずかな違いがあります。
上記の回答はどれもうまくいきませんでした-PHPは、mysqliに依存するページを除くすべてを適切にレンダリングしました。 OS Xを使用しているため、修正は単純に
Sudo port install php56-mysql
その後、PHP-FPMとnginxを再起動します。
古いApache/PHPセットアップからnginxに移行していましたが、php-mysql
とphp-fpm
のドライバーのバージョンの不一致に気づきませんでした。
location ~ [^/]\.php(/|$) {
fastcgi_pass unix:/PATH_TO_YOUR_PHPFPM_SOCKET_FILE/php7.0-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
がんばろう
これは私の問題を解決しました:
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include snippets/fastcgi-php.conf;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
}
これは、UBUNTU 18.04 + Apache + php7.2の仮想ホストです
server {
listen 80;
server_name test.test;
root /var/www/html/{DIR_NAME}/public;
location / {
try_files $uri /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
最後の行は、他の回答とは異なります。
私は同様の問題を抱えていました、nginxはページを途中で処理してから停止していました。ここで提案された解決策はどれも私にとってはうまくいきませんでした。 nginx fastcgiバッファリングを変更して修正しました:
fastcgi_max_temp_file_size 0;
fastcgi_buffer_size 4K;
fastcgi_buffers 64 4k;
変更後、私のlocation
ブロックは次のようになりました。
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_max_temp_file_size 0;
fastcgi_buffer_size 4K;
fastcgi_buffers 64 4k;
include fastcgi_params;
}
詳細については、 https://www.namhuy.net/3120/fix-nginx-upstream-response-buffered-temporary-file-error.html を参照してください
空白の画面が表示される場合、2つの理由が考えられます。
ブラウザがフレームの表示をブロックしている。一部のブラウザでは、フレームは安全ではないと見なされます。これを克服するには、フレームレスバージョンのphpPgAdminを起動します。
http://-your-domain-name-/intro.php
X-Frame-OptionsでNginxのセキュリティ機能を有効にしました。無効にしてみてください。