How To Fix Apache Configuration Error AH00558: Could not reliably determine the server's fully qualified domain name.

An Apache AH00558: Could not reliably determine the server's fully qualified domain name message occurs when Apache is not configured with a global ServerName directive. The warning is only informative yet annoying, and will in any case prevent Apache from operating normally.


Troubleshooting using systemctl


The first step in dealing with the AH00558 problem is to use systemctl to verify Apache's status. The output contains all of the information required to help us resolve the issue.

Let's run the following to check Apache’s status:

$ sudo systemctl status apache2.service -l --no-pager

The -l option tells systemctl to output the complete line, rather than using ellipses (…) for long lines.

The --no-pager flag will output the complete log to your screen without using a program like less, which only exposes one screen of material at a time.

The output should be similar to the following:

Output

● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active: active (running) since Mon 2024-01-22 14:54:23 UTC; 7h ago
  Process: 1814 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
 Main PID: 46 (apache2)
    Tasks: 55 (limit: 2750)
   CGroup: /system.slice/apache2.service
           ├─46 /usr/sbin/apache2 -k start
           ├─47 /usr/sbin/apache2 -k start
           └─48 /usr/sbin/apache2 -k start

Jan 22 14:54:23 43d2cd344s1 systemd[1]: Starting The Apache HTTP Server...
Jan 22 14:54:23 43d2cd344s1 apachectl[35]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
Jan 22 14:54:23 43d2cd344s1 systemd[1]: Started The Apache HTTP Server.



Troubleshooting using apachectl


The apachectl configtest command inspects the syntax of Apache configuration files. It also checks the files that it recursively points to.

Let's run the following command:

$ sudo apachectl configtest

The output should be similar to the following:

Output

AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 121.0.0.1. Set the 'ServerName' directive globally to suppress this message

Syntax OK


Generally speaking, it alerts you that Apache could not identify a valid ServerName directive in its configuration file; nothing more, nothing less.



Setting a Global ServerName Directive


To overcome this issue, we need to add a ServerName directive to our Apache configuration. To manage requests for numerous sites on a single server, Apache employs the ServerName directive to translate incoming HTTP requests to an IP address or DNS hostname, which is then handled by VirtualHost directives.

Let's open the /etc/apache2/apache2.conf file with root privileges with our preferred text editor here; nano.

$ sudo nano /etc/apache2/apache2.conf


Add a line containing ServerName 127.0.0.1 to the end of the file:

. . .
. .
.
 
# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

ServerName 127.0.0.1


Run apachectl to test that the configuration is valid.

$ sudo apachectl configtest

Output
Syntax OK


Now, let's reload Apache’s configuration and check its status using systemctl reload along with systemctl status command:

$ sudo systemctl reload apache2 && sudo systemctl status apache2

Output

● apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2024-01-22 14:54:23 UTC; 7h ago
       Docs: https://httpd.apache.org/docs/2.4/
    Process: 9025 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/SUCCESS)
   Main PID: 1814 (apache2)
      Tasks: 56 (limit: 2750)
     Memory: 6.4M
        CPU: 2.574s
     CGroup: /system.slice/apache2.service
             ├─1814 /usr/sbin/apache2 -k start
             ├─9030 /usr/sbin/apache2 -k start
             └─9031 /usr/sbin/apache2 -k start

Jan 22 14:54:23 virtuallinux systemd[1]: Starting The Apache HTTP Server...
Jan 22 14:54:23 virtuallinux systemd[1]: Started The Apache HTTP Server.
Jan 22 14:54:25 virtuallinux systemd[1]: Reloading The Apache HTTP Server...
Jan 22 14:54:25 virtuallinux systemd[1]: Reloaded The Apache HTTP Server.
Jan 22 22:53:45 virtuallinux systemd[1]: Reloading The Apache HTTP Server...
Jan 22 22:53:45 virtuallinux systemd[1]: Reloaded The Apache HTTP Server.

Again, while this annoying message does not prevent Apache from running, it can be resolved by setting a global ServerName directive.

We hope this was of great use!