OK - you need to bounce httpd with systemctl restart httpd for the configs in the YML to propagate to the httpd conf. If there are any errors the should be in journalctl or systemctl status httpd.
What OnDemand version are you on? That config changed from maintenance_ip_whitelist to maintenance_ip_allowlist at some point. You’re looking at the latest documentation, but you may need to look at your version’s documentation specifically.
OK there’s something obvious that we’re missing here. Have you modified the distribution at all? Or did you modify the resulting .conf file by hand at any time?
Also I’d check journalctl to see if there really is any output from update_ood_portal at any time.
I installed OOD via RPM and created .conf file by sudo /opt/ood/ood-portal-generator/sbin/update_ood_portal.
journalctl -xe displayed below.
$ sudo journalctl -xe
Defined-By: systemd
Support: https://wiki.rockylinux.org/rocky/support
A stop job for unit httpd.service has finished.
The job identifier is 862567 and the job result is done.
Mar 25 18:41:58 ood.example.org systemd[1]: httpd.service: Consumed 2.395s CPU time.
Subject: Resources consumed by unit runtime
Defined-By: systemd
Support: https://wiki.rockylinux.org/rocky/support
The unit httpd.service completed and consumed the indicated resources.
Mar 25 18:41:58 ood.example.org systemd[1]: One-time temporary TLS key generation for httpd.service was skipped because no trigger condition checks were met.
Subject: A start job for unit httpd-init.service has finished successfully
Defined-By: systemd
Support: https://wiki.rockylinux.org/rocky/support
A start job for unit httpd-init.service has finished successfully.
The job identifier is 862712.
Mar 25 18:41:58 ood.example.org systemd[1]: Starting The Apache HTTP Server...
Subject: A start job for unit httpd.service has begun execution
Defined-By: systemd
Support: https://wiki.rockylinux.org/rocky/support
A start job for unit httpd.service has begun execution.
The job identifier is 862567.
Mar 25 18:41:58 ood.example.org update_ood_portal[3744981]: cp -p /etc/pki/tls/certs/bundle.pem /etc/ood/dex/bundle.pem
Mar 25 18:41:58 ood.example.org update_ood_portal[3744981]: chown ondemand-dex:ondemand-dex /etc/ood/dex/bundle.pem
Mar 25 18:41:58 ood.example.org update_ood_portal[3744981]: cp -p /etc/pki/tls/private/wildcard.key /etc/ood/dex/wildcard.key
Mar 25 18:41:58 ood.example.org update_ood_portal[3744981]: chown ondemand-dex:ondemand-dex /etc/ood/dex/wildcard.key
Mar 25 18:41:59 ood.example.org update_ood_portal[3744981]: No change in Apache config.
Mar 25 18:41:59 ood.example.org update_ood_portal[3744981]: No change in the Dex config.
Mar 25 18:41:59 ood.example.org httpd[3744992]: [Wed Mar 25 18:41:59.079220 2026] [so:warn] [pid 3744992:tid 3744992] AH01574: module status_module is already loaded, skipping
Mar 25 18:41:59 ood.example.org httpd[3744992]: Server configured, listening on: port 443, port 81, port 80
Mar 25 18:41:59 ood.example.org systemd[1]: Started The Apache HTTP Server.
Subject: A start job for unit httpd.service has finished successfully
Defined-By: systemd
Support: https://wiki.rockylinux.org/rocky/support
A start job for unit httpd.service has finished successfully.
The job identifier is 862567.
Mar 25 18:41:59 ood.example.org sudo[3744978]: pam_unix(sudo:session): session closed for user root
Mar 25 18:42:00 ood.example.org sudo[3745173]: s.park : TTY=pts/0 ; PWD=/var/www/ood/apps/dev/s.park ; USER=root ; COMMAND=/bin/journalctl -xe
Mar 25 18:42:00 ood.example.org sudo[3745173]: pam_unix(sudo:session): session opened for user root(uid=0) by s.park(uid=37447)
# Support maintenance page during outages of OnDemand
RewriteEngine On
RewriteCond /var/www/ood/public/maintenance/index.html -f
RewriteCond /etc/ood/maintenance.enable -f
RewriteCond %{REQUEST_URI} !/public/maintenance/.*$
RewriteCond %{REMOTE_ADDR} !^10\.20\.30\..*
RewriteCond %{REMOTE_ADDR} !^10\.20\.40\.3
RewriteRule ^.*$ /public/maintenance/index.html [R=302,L]
And I found the reason.
The first is the cache of browser. After I cleaned the cache, it’s working. The second one(I tried) is the format of IP address. I thought the type of IP address like 10.20.40.0/24 would be okay, but it’s not. I misunderstood the sentence in the doc.
In this example we allow access to anyone from 192.168.1..* which is the 192.168.1.0/24 CIDR and the single IP ‘10.0.0.1’.