Troubleshooting a web server in Linux

Posted by

Troubleshooting a web server in Linux involves checking various components, including the server status, configuration files, logs, network settings, and more. Here’s a step-by-step guide to help you troubleshoot common web server issues:

1. Check Server Status

Using systemctl

  • Check if the web server is running:
sudo systemctl status apache2  # For Apache on Debian/Ubuntu
sudo systemctl status httpd    # For Apache on CentOS/RHEL
sudo systemctl status nginx    # For Nginx

Using ps

  • Verify the server process:
ps aux | grep apache2  # For Apache
ps aux | grep httpd    # For Apache
ps aux | grep nginx    # For Nginx

2. Check Logs

Apache Logs

  • Error log:
sudo less /var/log/apache2/error.log  # Debian/Ubuntu
sudo less /var/log/httpd/error_log    # CentOS/RHEL

Access log:

sudo less /var/log/apache2/access.log  # Debian/Ubuntu
sudo less /var/log/httpd/access_log    # CentOS/RHEL

Nginx Logs

  • Error log:
sudo less /var/log/nginx/error.log

Access log:

sudo less /var/log/nginx/access.log

3. Check Configuration Files

Apache Configuration

  • Main configuration file:
sudo less /etc/apache2/apache2.conf  # Debian/Ubuntu
sudo less /etc/httpd/conf/httpd.conf # CentOS/RHEL

Site-specific configuration files:

sudo less /etc/apache2/sites-available/000-default.conf  # Debian/Ubuntu
sudo less /etc/httpd/conf.d/vhost.conf                   # CentOS/RHEL

Nginx Configuration

  • Main configuration file:
sudo less /etc/nginx/nginx.conf

Site-specific configuration files:

sudo less /etc/nginx/sites-available/default

Validate Configuration

  • Apache:
sudo apachectl configtest

Nginx:

sudo nginx -t

4. Restart the Web Server

Apache

sudo systemctl restart apache2  # Debian/Ubuntu
sudo systemctl restart httpd    # CentOS/RHEL

5. Check Network Connectivity

Using curl or wget

  • Test HTTP/S endpoints:
curl -I http://localhost
wget -qO- http://localhost

Using netstat or ss

  • Check if the web server is listening on the expected ports:
sudo netstat -tuln | grep :80
sudo ss -tuln | grep :80
sudo ss -tuln | grep :443

Using ping

  • Check connectivity to the server:
ping <hostname_or_ip>

6. Check Firewall Settings

Using ufw (Uncomplicated Firewall)

  • List firewall rules:
sudo ufw status

Allow HTTP and HTTPS traffic:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Using firewalld

  • Check firewall status and open ports:
sudo firewall-cmd --list-all
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

7. Check DNS Configuration

  • Verify DNS resolution for the domain:
nslookup <your-domain>
dig <your-domain>

8. Check SSL/TLS Configuration

Using openssl

  • Test SSL/TLS connection:
openssl s_client -connect <your-domain>:443

Check SSL Certificates

  • Verify the paths and contents of SSL certificates in your configuration files:
sudo less /etc/ssl/certs/your_certificate.crt
sudo less /etc/ssl/private/your_private_key.key

9. Debugging Tools

Using strace

  • Trace system calls and signals for the web server process:
sudo strace -p <pid>

Using gdb

  • Debug the web server binary
sudo gdb /path/to/httpd <pid>

Summary

  1. Check Server Status: Use systemctl or ps.
  2. Check Logs: Use less, tail, and grep to view and search logs.
  3. Check Configuration Files: Validate and view configuration files using less and validation commands.
  4. Restart the Web Server: Use systemctl restart.
  5. Check Network Connectivity: Use curl, wget, netstat, ss, and ping.
  6. Check Firewall Settings: Use ufw or firewalld.
  7. Check DNS Configuration: Use nslookup and dig.
  8. Check SSL/TLS Configuration: Use openssl and verify SSL certificates.
  9. Debugging Tools: Use strace and gdb for in-depth debugging.
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x