Here are the steps to find and fix the 500 internal server errors.
Read Your Web Server's Error Log
I use Nginx and in Nginx's configuration file I set my own error log file location. In that error log I saw the following log entry (let's call it Log Entry #1):
2012/02/09 17:33:17 [alert] 10255#0: 512 worker_connections are not enough
And the following log entry (let's call it Log Entry #2):
2012/01/31 17:26:58 [error] 7538#0: *101 FastCGI sent in stderr: "PHP Fatal error: Allowed memory size of 262144 bytes exhausted (tried to allocate 261900 bytes) in Unknown on line 0" while reading response header from upstream, client: 2.2.3.3, server: www.mensfashionforless.com, request: "HEAD /gray-hoodie.html HTTP/1.0", upstream: "fastcgi://127.0.0.1:9000", host: "www.mensfashionforless.com"
Incidentally your web server's access log entry related to this error may look something like this:
2.2.3.3 - - [09/Feb/2012:23:07:38 +0000] "GET /nordstrom-red-shirt.html HTTP/1.0" 500 0 "-" "Wget/1.12 (linux-gnu)"
Fix the Error Indicated by the Web Server's Error Log
To fix the error indicated by Log Entry #1 simply increase 'worker_connections' in Nginx's configuration file. My Nginx's configuration is located at /etc/nginx/nginx.conf and I put the following lines in the file:
1 | events { |
2 | worker_connections 1024; |
3 | } |
To fix the error indicated by Log Entry #2 simply increase 'memory_limi' in php.ini as follows:
memory_limit = 128M
My php.ini is located at /etc/php5/cgi/php.ini.
Incidentally increasing the maximum amount of memory a PHP script may consume is usually not the answer. The real fix would be fix the script that causes the memory leak.
I looked through the PHP source code and found that I was putting large amounts of data into a variable. I changed it so that I only put the data I need into the variable and the error was gone without having to change 'memory_limit'.
If your web server's error log shows other errors you don't know how to fix let me know!