Nginx+PHP-FPMで突然、画面が真っ白になりました。驚いて、あちこちグーグル先生に聞き回りましたが、情報が古く、適切なものが見当たりませんでした。そこで、フト、本家のサイトはどうなのかと思い、除くと結果的にたちどころに解決しました。
サイトのURLは、http://wiki.nginx.org/PHPFcgiExampleですが、主要な部分を下図に貼り付けます。
ということで、fastcgi_parmsを次のように変更しました。
fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; #below add one line fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; #below add one line fastcgi_param PATH_INFO $fastcgi_path_info; #below add one line fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param HTTPS $https if_not_empty; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; # PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200;
#below add one lineの下の行が、付け足したところです。このうち、
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
の一行は必須のようです。環境によって、「$document_root$」は必要な場合とそうでない場合がありました。
/etc/nginx/sites-available/defaultはほとんど変わりありません。基本的なところのみ下記に記してみます。
# You may add here your # server { # ... # } # statements for each of your virtual hosts to this file ## # You should look at the following URL's in order to grasp a solid understanding # of Nginx configuration files in order to fully unleash the power of Nginx. # http://wiki.nginx.org/Pitfalls # http://wiki.nginx.org/QuickStart # http://wiki.nginx.org/Configuration # # Generally, you will want to move this file somewhere, and start with a clean # file but keep this around for reference. Or just disable in sites-enabled. # # Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples. ## server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; # Make site accessible from http://localhost/ server_name localhost; # root /usr/share/nginx/html; root /var/www/html; index index.html index.htm index.php; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; location / { if (!-f $document_root$fastcgi_script_name) { return 404; } # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; # Uncomment to enable naxsi on this location # include /etc/nginx/naxsi.rules } # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests #location /RequestDenied { # proxy_pass http://127.0.0.1:8080; #} #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # #error_page 500 502 503 504 /50x.html; #location = /50x.html { # root /usr/share/nginx/html; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; # # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # # # With php5-cgi alone: # fastcgi_pass 127.0.0.1:9000; # # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include /etc/nginx/fastcgi_params; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # location ~ /\.ht { deny all; } }
この設定で、sudo service nginx restartでNginxを再起動させ、http://localhost/info.phpを試してみました。そうすると、下図のようになりました。
もともとの発端になったxdebugの項もあります。一時は傷心の思いでApacheに戻ったりしました。ヤレヤレですが、要するに本家のサイトの情報こそがもっとも最新かつ信頼できるという話でした。なお、display_errors Offの問題かとも思いましたが、そうではありませんでした。また、php.iniを変更するとNginxではなく、$sudo service php5-fpm restartとやる必要が有ります。