HTTP status codes provide information about whether an online request was successful, and if not, what the error is. But the error messages aren’t always clear. This is especially the case for the “500 Internal Server Error.” This message indicates that an error has occurred during connection to the server and that the requested page cannot be accessed. However, it won’t tell you exactly why this is the case. Fortunately, there are different methods for finding the cause. We point out typical error sources and give tips on what to do if you encounter the HTTP error 500.
What does the internal server error mean?
Using status codes, the web server tells an internet user’s browser (client) whether a request (i.e. accessing a website) was successful or not. If the browser receives the 200 status code, it knows that everything went well. However, the user never sees this message since the requested content appears instead. The situation is different with the 400 and 500 status codes. While the former indicate client errors, the latter are server-related. The Internal Server Error 500 is a collective status code for server errors. Therefore, at first glance, it is not possible to determine where the error actually lies. The user only knows that the server has reported an unexpected error.
However, if the server has installed Microsoft Internet Information Services (Microsoft IIS), the error code will be specified. Decimal places indicate the cause of the error in more detail:
- 500.0: Module or ISAPI error occurred.
- 500.11: Application is shutting down on the web server.
- 500.12: Application is busy restarting on the web server.
- 500.13: Web server is too busy.
- 500.15: Direct requests for global.asax are not allowed.
- 500.19: Configuration data is invalid.
- 500.21: Module not recognized.
- 500.22: An ASP.NET httpModules configuration does not apply in Managed Pipeline mode.
- 500.23: An ASP.NET httpHandlers configuration does not apply in Managed Pipeline mode.
- 500.24: An ASP.NET impersonation configuration does not apply in Managed Pipeline mode.
- 500.50: A rewrite error occurred during RQ_BEGIN_REQUEST notification handling. A configuration or inbound rule execution error occurred.
- 500.51: A rewrite error occurred during GL_PRE_BEGIN_REQUEST notification handling. A global configuration or global rule execution error occurred.
- 500.52: A rewrite error occurred during RQ_SEND_RESPONSE notification handling. An outbound rule execution occurred.
- 500.53: A rewrite error occurred during RQ_RELEASE_REQUEST_STATE notification handling. An outbound rule execution error occurred. The rule is configured to be executed before the output user cache gets updated.
- 500.100: Internal ASP error.
What are the causes of error 500?
The “Internal Server Error” can occur when the request is processed by the web server. The collective status code includes everything unplanned that can happen on the server and prevent the website from being loaded. The server error 500 probably happens because an error has occurred in the configuration of the web server. Here is a selection of typical error sources:
- Permission error: The permissions of the main files and folders are not set correctly.
- PHP timeout: The script tries to access an external resource and experiences a timeout.
- Incorrect code in .htaccess: The structure in a .htaccess file could be wrong.
- Error in syntax or code in CGI/Perl scripts: In some cases, scripts are incorrect. Paths, especially, can be misaligned.
- PHP memory limit: A process exceeds memory and therefore cannot be executed correctly.
In the case of WordPress sites or other content management systems, installing a faulty or incompatible extension can also be the cause. Plugins and themes – especially from third-party providers – can affect the entire website.
How can website operators fix the 500 Internal Server Error?
Are your website visitors only seeing the 500 server error? As an operator, you should tackle the problem quickly because not only will this scare off your visitors, but it could also mean that Google will lower your ranking. Before you take action, first check whether your server is still running. If not, contact your hosting provider as soon as possible.
If there is an internal error, the first step is to view the log files. For Linux servers, the collection of error messages should be found at /var/log/httpd/error_log. It makes sense to reload the website to reproduce the HTTP error 500 code and observe how the log file is being created. This will help you find the source of the error quite quickly. Also consider which changes were made shortly before. In many cases, incorrectly programmed or incompatible plugins are the cause of error messages.
Errors can also occur if you have not set permissions correctly for important files. In general, there are three types of rights:
- Read (r)
- Write (w)
- Execute (x)
These permissions can be assigned for three different user types:
- Owner of the file
- Group of users
- All others
The rights are specified either in the abbreviations r, w, and x, or in corresponding numerical values: 4 for read, 2 for write, and 1 for execute. They are added for each user type and specified one after the other: rwxr-xr-x (rwx for the owner, r-x for the group, and r-x for all others) or 755. This configuration (755) should be the default setting. If the permission assignment is set differently, an error may occur. You can change this with a command:
chmod 755 filename
chmod 777 filename
Next, check (if distributing the rights didn’t produce the error message) if your scripts are running correctly. Sometimes errors occur because the script files have been moved, renamed, or deleted. Also check the .htaccess file: even a syntax error – no matter how small – can cause an internal server error. An equally common error is incorrectly formatting the .htaccess file. This must be created in ASCII or ANSI format, not in Unicode. Therefore, write the file in a text editor such as Notepad, Notepad++, or Sublime Text, and not in a word processing program such as Microsoft Word. To test whether the file is responsible for the error, you can temporarily rename it and reload the website. The server now won’t access .htaccess when loading the website. If you no longer receive the error message, you can repair the file or create a new one.
A timeout can also lead to an error message. In this case, it isn’t a web server error, but rather an interrupted connection to an external source. Are PHP scripts on your website set to access resources from other servers? Perhaps the resource is no longer available or server communication is down for some other reason. One way to eliminate this source of error is of course to not make your site dependent on external resources. If this is not possible, you can increase the time limit of your script. It also makes sense to implement efficient error handling so that errors in the PHP script can be detected more accurately.
Could it be that the memory is overloaded? The memory limit determines how much memory a process may use. If more RAM is needed than is available, this could result in an internal server error. You can increase the limit as a temporary solution. To do this, add a command like this to php.ini:
memory_limit = 512M
If none of these methods offer you a solution, it is a good idea to contact your hosting provider. Before doing so, you can check the status of the servers: many hosting service providers will report the status of their servers via a status page or inform users via social media if a problem has occurred.