Troubleshooting Blank Page Issues in WordPress on Nginx with PHP-FPM: A Comprehensive Debug Guide


2 views

A blank white screen in WordPress typically indicates a PHP execution failure. Despite having proper configurations in Nginx and PHP-FPM, the absence of visible errors makes this particularly frustrating. Let's examine the complete diagnostic workflow.

# Verify PHP-FPM is running
systemctl status php-fpm

# Check Nginx error logs (real-time monitoring)
tail -f /var/log/nginx/error.log

# Verify socket permissions
ls -la /var/run/php-fpm/

Add these to your php.ini for proper error reporting:

display_errors = On
display_startup_errors = On
error_reporting = E_ALL
log_errors = On
error_log = /var/log/php_errors.log

The most common culprit is missing SCRIPT_FILENAME parameter:

location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_buffer_size 128k;
    fastcgi_buffers 4 256k;
    fastcgi_busy_buffers_size 256k;
}

Create a test.php file in your WordPress root:

<?php
phpinfo();
?>

If this works but WordPress doesn't, enable WP_DEBUG:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', true);

Run these commands to fix permission problems:

chown -R www:www /srv/apps/us/sharonrhodes/blog
find /srv/apps/us/sharonrhodes/blog -type f -exec chmod 644 {} \;
find /srv/apps/us/sharonrhodes/blog -type d -exec chmod 755 {} \;

Check PHP-FPM pool status:

sudo -u www curl "http://localhost/status"

For memory-related issues, adjust these php.ini settings:

memory_limit = 256M
max_execution_time = 300

When WordPress returns blank pages with Nginx and PHP-FPM, the absence of error logs makes troubleshooting particularly frustrating. Let's examine some critical diagnostic steps:

# First, verify PHP-FPM is actually processing requests
tail -f /var/log/php-fpm.log | grep -i "executing"

The most common culprits in Nginx+PHP-FPM setups:

# Verify PHP file permissions
ls -la /srv/apps/us/sharonrhodes/blog/

# Check if PHP scripts are being executed
curl -I http://blog.sharonrhodes.us/wp-admin/install.php

Add these to your php.ini for better debugging:

display_errors = On
display_startup_errors = On
error_reporting = E_ALL
log_errors = On
error_log = /var/log/php_errors.log
cgi.fix_pathinfo=0

Improve your fastcgi_params configuration:

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  PATH_INFO          $fastcgi_path_info;
fastcgi_param  PHP_VALUE          "error_log=/var/log/php_errors.log";
fastcgi_param  PHP_ADMIN_VALUE    "open_basedir=none";

Enable WordPress debugging in wp-config.php:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
@ini_set('display_errors', 0);

When basic checks don't reveal the issue:

# Test PHP-FPM directly
SCRIPT_NAME=/test.php \
SCRIPT_FILENAME=/srv/apps/us/sharonrhodes/blog/test.php \
QUERY_STRING= \
REQUEST_METHOD=GET \
cgi-fcgi -bind -connect 127.0.0.1:9000

Create a simple test.php with:

<?php
phpinfo();
?>

Adjust PHP-FPM pool settings for better stability:

pm = ondemand
pm.max_children = 20
pm.process_idle_timeout = 10s
pm.max_requests = 1000