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