Symfony 3.4生产环境app.php报500错误排查求助
Let's break down the steps to diagnose and fix your problems, starting with enabling detailed error visibility since that's the fastest way to get to the root cause.
1. Fix app_dev.php Access Restriction First
The "You are not allowed to access this file" message comes from Symfony's built-in IP whitelist in app_dev.php. By default, it only allows local (127.0.0.1/::1) access. To access it from your remote server or local machine:
- Open
/var/www/symfony_3_subscribers_in_file_demo/web/app_dev.php - Locate the IP check block:
if (isset($_SERVER['HTTP_CLIENT_IP']) || isset($_SERVER['HTTP_X_FORWARDED_FOR']) || !(in_array(@$_SERVER['REMOTE_ADDR'], ['127.0.0.1', '::1'], true) || php_sapi_name() === 'cli-server') ) { header('HTTP/1.0 403 Forbidden'); exit('You are not allowed to access this file. Check app_dev.php for more information.'); } - Add your server's public IP (178.62.70.115) or your local machine's public IP to the allowed array, e.g.:
['127.0.0.1', '::1', '178.62.70.115']
Once you can access app_dev.php, it will show you detailed error traces for both dev and prod contexts (you can switch environments via the query string: ?env=prod).
2. Check Symfony's Production Logs
Apache's error log might be empty, but Symfony writes its own production-specific logs to the logs directory. Run this command to view the latest entries:
tail -n 20 /var/www/symfony_3_subscribers_in_file_demo/logs/prod.log
This log will almost certainly contain the exact error causing the 500 in app.php.
3. Verify Cache & Logs Permissions (Critical for Symfony)
Your current permissions (drwxrwxr-x) might not let the Apache user (usually www-data) write to these directories. Here's how to fix this:
- First, confirm the Apache user with:
ps aux | grep apache - If the user is
www-data, update the ownership of cache and logs:sudo chown -R www-data:www-data /var/www/symfony_3_subscribers_in_file_demo/cache /var/www/symfony_3_subscribers_in_file_demo/logs - For your local environment, ensure your user has write access, or run the Symfony cache clear command for production:
(Thephp bin/console cache:clear --env=prod --no-debug--no-debugflag mimics the production kernel behavior.)
4. Enable Error Display in app.php (Temporary Debugging)
To see the 500 error directly in the browser (only do this temporarily in a non-public environment):
- Open
/var/www/symfony_3_subscribers_in_file_demo/web/app.php - Add these lines right before the
$kernel = new AppKernel('prod', false);line:error_reporting(E_ALL); ini_set('display_errors', 1);
Refresh app.php and you'll see the raw error message instead of a generic 500.
5. Check PHP's Error Log
Sometimes PHP logs errors to a separate file outside Apache's logs. Find the PHP error log path with:
php -i | grep error_log
Then view the latest entries:
tail -n 20 /path/to/php/error.log
This might catch issues that Symfony's logs don't, like missing extensions or memory limits.
6. Validate Rewrite Module & Virtual Host Configuration
While your rewrite rules look correct, double-check that mod_rewrite is enabled:
sudo a2enmod rewrite sudo service apache2 restart
Also, confirm that your DocumentRoot points to the correct web directory and that the <Directory> block has the right path (your config looks correct, but a typo here could cause issues).
内容的提问来源于stack exchange,提问作者Dariux

