AH00072 high
Apache AH00072: make_sock: could not bind to address [::]:80 (98: Address already in use)
Apache fails to start because another process already holds port 80 or 443 on the same address.
What you see
(98)Address already in use: AH00072: make_sock: could not bind to address [::]:80 (98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80 no listening sockets available, shutting down AH00015: Unable to open logs
What’s actually happening
httpd or apache2 refuses to start and exits immediately. systemctl status apache2 shows the unit failed, and the error log or journal carries the AH00072 line naming the port it couldn't grab. Sites are down because nothing ends up listening on 80/443. A reload of an already-running Apache usually works fine, which is what makes this confusing — only a cold start trips it.
Common causes
- A second web server (nginx, Caddy, lighttpd, or another httpd) is already bound to the port.
- A previous Apache process didn't fully exit — a stale worker still holds the socket while systemd thinks the service is stopped.
- Duplicate Listen directives: the main config and a file in conf.d/ or ports.conf both declare Listen 80, so Apache tries to bind it twice in one start.
- mod_ssl loaded twice, or two vhosts with identical Listen 443 https lines, double-binding 443.
- A non-Apache service (Docker container publishing :80, a dev server, Webmin) quietly took the port after a reboot.
How to fix it
- Find what owns the portRun sudo ss -tlnp 'sport = :80' or sudo lsof -i :80 (swap 443 as needed). Both print the PID and process name holding the socket. ss is on every modern systemd box; lsof you may need to install.
- Stop the conflicting service or kill the stray PIDIf it's nginx: sudo systemctl stop nginx (and disable it if it shouldn't run). If it's a leftover httpd worker, sudo systemctl stop apache2 then confirm with ss that the port is free; if a zombie remains, sudo kill <PID>, then start Apache.
- Hunt down duplicate Listen linesRun sudo apachectl -S — it lists every Listen and vhost and will flag overlaps. Then grep -rn 'Listen ' /etc/apache2/ (or /etc/httpd/) and remove the redundant entry. On Debian/Ubuntu, Listen belongs in ports.conf only.
- Check for a double-loaded SSL modulegrep -rn 'Listen 443' across your config. If two vhosts both open 443 outside an <IfModule>, or mod_ssl is enabled twice, you get the bind clash on the HTTPS port specifically. Consolidate to one Listen 443.
- Validate, then start cleansudo apachectl configtest must return Syntax OK. Then sudo systemctl start apache2 and tail the log: sudo journalctl -u apache2 -n 50. A clean start writes no AH00072.
Stop it recurring
Keep exactly one Listen directive per port in a single file, and run apachectl configtest before every restart.
Related errors