It probably related to the way how cache is enabled for "/" URL.
For some reason, cache was not enabled for that page with PURGE request.
Like in a situation that rewrite rule enable cache only when request method is "GET".

The purge request must be sent to the IP that the vhost bound to, by default purge_cache_byrul.php uses 127.0.0.1, but the request cannot reach the vhost unless it also bound to 127.0.0.1 IP. Explicitly set the IP in the purge request works.

The purge request must be sent to the IP that the vhost bound to, by default purge_cache_byrul.php uses 127.0.0.1, but the request cannot reach the vhost unless it also bound to 127.0.0.1 IP. Explicitly set the IP in the purge request works.

Click to expand...

Then why do other URLs work then? How can it work via 127.0.0.1 then since I need it to work via automated methods that don't add this.

More investigation found that other URL works is due to a flaw in LSWS handling redirect.
when 127.0.0.1 is used, it goes to the Apache default vhost at /var/www/html, the URL does not exist, causes a redirect to /404.shtml, when redirect performed, LSWS uses the "Host" header to locate the vhost and found the cached URL. then purged.

For "/" URL, it does not perform the /404.shtml redirect.

To make it work reliably, add the IP to purge_cache_byurl.php parameter, it works for all URL.