Apache Troubleshooting
Common issues and solutions for Apache HTTP Server.
Check Apache Status
- Debian/Ubuntu
- CentOS
sudo systemctl status apache2
sudo apache2ctl configtest
sudo systemctl status httpd
sudo apachectl configtest
Common Issues
1. Apache Won't Start
Check Error Logs
- Debian/Ubuntu
- CentOS
sudo tail -f /var/log/apache2/error.log
sudo tail -f /var/log/httpd/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
- Debian/Ubuntu
- CentOS
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
sudo chown -R apache:apache /var/www/html
sudo chmod -R 755 /var/www/html
Fix Directory Permissions
- Debian/Ubuntu
- CentOS
sudo chown www-data:www-data /var/www/html
sudo chmod 755 /var/www/html
sudo chown apache:apache /var/www/html
sudo chmod 755 /var/www/html
3. Virtual Host Not Working
Check Virtual Host Configuration
- Debian/Ubuntu
- CentOS
sudo apache2ctl -S
sudo apachectl -S
Enable Site (Debian/Ubuntu)
sudo a2ensite your-site.conf
sudo systemctl reload apache2
Check Virtual Host Files
- Debian/Ubuntu
- CentOS
ls -la /etc/apache2/sites-enabled/
ls -la /etc/apache2/sites-available/
ls -la /etc/httpd/conf.d/
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
- Debian/Ubuntu
- CentOS
grep -r "AllowOverride" /etc/apache2/
grep -r "AllowOverride" /etc/httpd/
Enable Required Modules
- Debian/Ubuntu
- CentOS
sudo a2enmod rewrite
sudo a2enmod headers
sudo systemctl reload apache2
sudo apachectl -M | grep rewrite
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
- Debian/Ubuntu
- CentOS
sudo nano /etc/apache2/apache2.conf
sudo nano /etc/httpd/conf/httpd.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
- Debian/Ubuntu
- CentOS
sudo tail -f /var/log/apache2/access.log
sudo tail -f /var/log/httpd/access_log
Check Error Logs
- Debian/Ubuntu
- CentOS
sudo tail -f /var/log/apache2/error.log
sudo tail -f /var/log/httpd/error_log
Monitor Real-time Logs
- Debian/Ubuntu
- CentOS
sudo tail -f /var/log/apache2/*.log
sudo tail -f /var/log/httpd/*.log
Quick Diagnostic Commands
- Debian/Ubuntu
- CentOS
| Issue | Command |
|---|---|
| Check Apache status | sudo systemctl status apache2 |
| Test configuration | sudo apache2ctl configtest |
| Check port usage | sudo netstat -tulpn | grep :80 |
| Check processes | ps aux | grep apache |
| Check logs | sudo tail -f /var/log/apache2/error.log |
| Check virtual hosts | sudo apache2ctl -S |
| Check modules | sudo apache2ctl -M |
| Issue | Command |
|---|---|
| Check Apache status | sudo systemctl status httpd |
| Test configuration | sudo apachectl configtest |
| Check port usage | sudo netstat -tulpn | grep :80 |
| Check processes | ps aux | grep httpd |
| Check logs | sudo tail -f /var/log/httpd/error_log |
| Check virtual hosts | sudo apachectl -S |
| Check modules | sudo apachectl -M |
Emergency Commands
- Debian/Ubuntu
- CentOS
# 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
# Stop Apache immediately
sudo systemctl stop httpd
# Start Apache
sudo systemctl start httpd
# Restart Apache
sudo systemctl restart httpd
# Reload configuration
sudo systemctl reload httpd
Note: Always check logs first when troubleshooting Apache issues.