Troubleshooting when your website is offline – Linux
Introduction
This article details a few checks you can make if your website is offline and hopefully help determine the root cause to help you get it back online. This guide has been written for linux operating systems but is not specific to a distribution so should work for RHEL, CentOS, Debian servers etc.
Check if the server is online
Normally the quickest and easiest thing to do first is to ping your server to see if it is responding. This is done from an external machine, most likely the one you are trying to use to access your website.
e.g.
ping yourwebsite.com
also try
ping your_server_ip
If it responds to ping on the server ip but not the dns name, then it is most likely a DNS issue. If it does not respond to ping on either, then that would indicate an issue to the whole server not just the website. This could be a power, network or firewall issue.
To test DNS, you can run the dig command to make sure the IP is correct, e.g.
# dig A yourwebsite.com +short
This will return the IP address which should be your server. If nothing is returned, then the DNS servers do not have your DNS record.
If you don’t have dig or similar, then you can use online sites such as intodns.com to check.
Access the server with SSH
You should also be able to SSH and login to the server to verify running. You can access your server via ssh with below command
ssh username@your_server_ip
if you are not able to login to your server then the server may be hanging and in need of a reboot.
Check the server status via SSH
If you can log in then you will want to check the status of your server and services/
Check the server load
Run the following to check the load (also shows example output):
# uptime 11:14:12 up 21 min, 1 user, load average: 0.07, 0.23, 0.39
the numbers after the load average are: average load last 1 minute, average load last 5 minutes, average load last 15 minutes.
Depending on the number of CPU cores you have will determine how much load your server is under. For example if you had 8 cores and the load average was 11 then your server is overloaded as the load is higher than the number of cores.
You can also run the following to check load and the processes taking up the most load time:
# top
example output
Make sure your web server is running
Use systemctl status command to check if the running or not. You can also restart the service if needed.
If you’re using a distribution that refers to Apache as Apache2:
systemctl status apache2
To start, stop, restart and reload
systemctl status apache2 systemctl stop apache2 systemctl restart apache2 systemctl reload apache2
Reload will just re-read the config file which is useful to do to not disrupt the web service.
If you’re using a distribution that refers to Apache as httpd:
systemctl status httpd systemctl start httpd systemctl stop httpd systemctl restart httpd systemctl reload httpd
And if you are running Nginx as your web service:
systemctl status nginx systemctl start nginx systemctl stop nginx systemctl restart nginx systemctl reload nginx
Check the Logs
Take a look at the webserver logs to identify specific issues.
The logs will be usually present at directory /var/log . There could a subdirectory containing the logs, usually apache, apache2 or httpd depending on your Linux distro, otherwise:
/var/log/httpd.log
If you are using Nginx as your web server, the logs are usually located at below location
/var/log/nginx/access.log /var/log/nginx/error.log /var/log/nginx/nginx_error.log /var/log/nginx/access_error.log
To get a realtime look at the logs, you can watch the logs using the tail command:
tail -f /var/log/nginx/access.log tail -f /var/log/httpd.log
make sure to change the to the correct log path.
Verifying the Syntax of Web server
If your web server is failing to start, it may be due to incorrect syntax in the webserver configuration file.
Use one of the following to check your config:
apache2ctl -t httpd -t nginx -t
If you need to make changes to the configuration (make sure to backup the file first):
Default Configuration Directories for Apache is
Debian and Ubuntu distributions :
/etc/apache2/
Fedora, CentOS distributions :
/etc/httpd/
Configuration Directories for Nginx is
/etc/nginx/
Once you run the above command you will get message like Syntax OK or Test is successful.
Check the database
If you have configured your website to use a database backend, then the issue may be due to the database server.
Run one of the following to determine if the database is running:
systemctl status mysql systemctl status mysqld systemctl status mongod
The stop, start and reload commands will also work.
You can also verify with the netstat command
netstat -ntlp | grep mysql
If mysql is running, you will get something similar to this:
tcp6 0 0 :::3306 :::* LISTEN 3722/mysqld