Skip to main content

Apache Troubleshooting

Common issues and solutions for Apache HTTP Server.


Check Apache Status

sudo systemctl status apache2
sudo apache2ctl configtest

Common Issues

1. Apache Won't Start

Check Error Logs

sudo tail -f /var/log/apache2/error.log

Common Solutions

# Check if port 80 is in use
sudo netstat -tulpn | grep :80
sudo lsof -i :80

# Kill process using port 80
sudo fuser -k 80/tcp

# Check Apache configuration
sudo apache2ctl configtest # Ubuntu
sudo apachectl configtest # CentOS

2. Permission Issues

Fix File Permissions

sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html

Fix Directory Permissions

sudo chown www-data:www-data /var/www/html
sudo chmod 755 /var/www/html

3. Virtual Host Not Working

Check Virtual Host Configuration

sudo apache2ctl -S

Enable Site (Debian/Ubuntu)

sudo a2ensite your-site.conf
sudo systemctl reload apache2

Check Virtual Host Files

ls -la /etc/apache2/sites-enabled/
ls -la /etc/apache2/sites-available/

4. SSL Certificate Issues

Check SSL Certificate

# Check certificate validity
openssl x509 -in /etc/ssl/certs/your-cert.crt -text -noout

# Check certificate expiration
openssl x509 -in /etc/ssl/certs/your-cert.crt -noout -dates

Let's Encrypt Issues

# Check certificate status
sudo certbot certificates

# Test renewal
sudo certbot renew --dry-run

# Force renewal
sudo certbot renew --force-renewal

5. .htaccess Not Working

Check AllowOverride

grep -r "AllowOverride" /etc/apache2/

Enable Required Modules

sudo a2enmod rewrite
sudo a2enmod headers
sudo systemctl reload apache2

6. Performance Issues

Check Apache Processes

# Check running processes
ps aux | grep apache
ps aux | grep httpd

# Check memory usage
free -h

Optimize Apache Configuration

sudo nano /etc/apache2/apache2.conf

Add/modify these settings:

# Reduce memory usage
MaxRequestWorkers 150
MaxConnectionsPerChild 0

# Enable keep-alive
KeepAlive On
KeepAliveTimeout 5
MaxKeepAliveRequests 100

7. Firewall Issues

Debian/Ubuntu (UFW)

# Check UFW status
sudo ufw status

# Allow Apache
sudo ufw allow 'Apache Full'

# Check if UFW is blocking
sudo ufw status numbered

CentOS (firewalld)

# Check firewall status
sudo firewall-cmd --state

# Allow HTTP/HTTPS
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

# Check allowed services
sudo firewall-cmd --list-services

8. Log Analysis

Check Access Logs

sudo tail -f /var/log/apache2/access.log

Check Error Logs

sudo tail -f /var/log/apache2/error.log

Monitor Real-time Logs

sudo tail -f /var/log/apache2/*.log

Quick Diagnostic Commands

IssueCommand
Check Apache statussudo systemctl status apache2
Test configurationsudo apache2ctl configtest
Check port usagesudo netstat -tulpn | grep :80
Check processesps aux | grep apache
Check logssudo tail -f /var/log/apache2/error.log
Check virtual hostssudo apache2ctl -S
Check modulessudo apache2ctl -M

Emergency Commands

# Stop Apache immediately
sudo systemctl stop apache2

# Start Apache
sudo systemctl start apache2

# Restart Apache
sudo systemctl restart apache2

# Reload configuration
sudo systemctl reload apache2

Note: Always check logs first when troubleshooting Apache issues.