• Resolved Tony Hisir

    (@copperrefections)


    LiteSpeed Cache version: 7.8.1
    Hosting: FastComet (shared hosting)
    Other relevant plugins: WordFence Security (Pro), WooCommerce, Rank Math SEO
    Cloudflare: DNS only (not proxied) — not the cause of any REST blocking

    The problem:
    QUIC.cloud is able to send optimization work to my site (VPI/CCSS requests are going out, and Image Optimization has completed successfully — 53,900+ images pulled), but when QUIC.cloud’s servers try to call back into my site’s REST API to deliver finished results, that callback fails.

    Symptoms:

    • LiteSpeed Cache dashboard shows: “WordPress gave an unexpected response when notified with QUIC.cloud service results. Check WP API is properly configured.”
    • The node_wpapi_failed flag appears persistently across the LiteSpeed Cache dashboard (visible in the query string of every action link — Refresh Usage, Refresh Status, etc.)
    • QUIC.cloud dashboard shows repeated “Invalid WP API response” entries and “CCSS generation failed” errors across multiple pages/templates (not limited to one template type)

    Diagnostic steps already taken:

    1. Manually tested the plugin’s REST endpoint directly:
      /wp-json/litespeed/v1/notify_vpi

    Response:

       {"code":"rest_no_route","message":"No route was found matching the URL and request method.","data":{"status":404}}

    This suggests the route isn’t registered with WordPress’s REST API at all (a 404 rest_no_route, not a 403 firewall block).

    1. Flushed permalinks (Settings → Permalinks → Save) — no change.
    2. Allowlisted LiteSpeed’s REST namespace (/wp-json/litespeed/v1/, /wp-json/litespeed/v3/, /wp-json/litespeed/*) in WordFence’s firewall, plus allowlisted check.lscache.io — no change.
    3. Applied the community-documented disabled_node reset fix:

    php

       add_action('init', function() {
           if (class_exists('\LiteSpeed\Cloud')) {
               \LiteSpeed\Cloud::save_summary(['disabled_node' => []]);
           }
       });

    This has been running in my child theme’s functions.php for several years, with no change to the underlying problem.

    Question for support:
    Since this has persisted for years despite the standard fixes, and the REST endpoint itself returns rest_no_route rather than a firewall-style block, could you check server-side whether this route is registering correctly for my site/hosting environment? Happy to send an Environment Report (Toolbox → Report → Send to LiteSpeed) if that helps.

    Feel free to send the Environment Report alongside this note if their ticket form allows an attachment — I mentioned it at the end so they know it’s available.

    The page I need help with: [log in to see the link]

Viewing 10 replies - 1 through 10 (of 10 total)
  • Plugin Support litetim

    (@litetim)

    @copperrefections please send a report to Litespeed from LSC => Toolbox => Report => click on “Send to Litespeed” and share the ID generated(JUST the ID)

    Thank you

    Thread Starter Tony Hisir

    (@copperrefections)

    Last Report Number: PNRCKAFC

    Plugin Support litetim

    (@litetim)

    @copperrefections
    Hello
    The code with ‘disabled_node’ do not run all the time, correct?
    Your server ip(direct IP to server) is: 18*.*.*.99, please confirm.

    I tried connecting from CCSS node(that is used by your domain) to your site and I got a captcha response. One moment, please… Please make sure there is no captcha added: from plugin or CloudFlare.
    Tried other QC server and I did not got the captcha response.
    Main causes that could be:
    – server IP detection is not working as expected
    – something is stopping outside access(Cloudflare, Wordfence or other code)

    Things that can show “no route”: PHP code that will remove all routes OR routes are limited by firewall.

    Also, the report show an empty api_key Retry connecting the site to QC.

    Thread Starter Tony Hisir

    (@copperrefections)

    Yes; 185*******99

    This is the code Litespeed Support team had put on the top of my function.php page.

    <?php

    add_filter( 'cron_schedules', function( $schedules ) {
    /**
    * Increased to 7200 (2 Hours) to protect server resources
    * and prevent high PHP execution time errors.
    */
    $schedules['litespeed_crawl_filter'] = array( 'interval' => 7200, 'display' => 'LiteSpeed Crawler Every 2 Hours' );
    return $schedules;
    } );

    /if( is_plugin_active( 'litespeed-cache/litespeed-cache.php' ) ) { $_triggers = array( LiteSpeed\Base::O_IMG_OPTM_CRON => array( 'name' => 'litespeed_task_imgoptm_pull', 'hook' => 'LiteSpeed\Img_Optm::cron_pull' ), // always fetch immediately LiteSpeed\Base::O_OPTM_CSS_ASYNC => array( 'name' => 'litespeed_task_ccss', 'hook' => 'LiteSpeed\CSS::cron_ccss' ), LiteSpeed\Base::O_OPTM_UCSS => array( 'name' => 'litespeed_task_ucss', 'hook' => 'LiteSpeed\UCSS::cron' ), LiteSpeed\Base::O_MEDIA_VPI_CRON => array( 'name' => 'litespeed_task_vpi', 'hook' => 'LiteSpeed\VPI::cron' ), LiteSpeed\Base::O_MEDIA_PLACEHOLDER_RESP_ASYNC => array( 'name' => 'litespeed_task_lqip', 'hook' => 'LiteSpeed\Placeholder::cron' ), LiteSpeed\Base::O_DISCUSS_AVATAR_CRON => array( 'name' => 'litespeed_task_avatar', 'hook' => 'LiteSpeed\Avatar::cron' ), LiteSpeed\Base::O_IMG_OPTM_AUTO => array( 'name' => 'litespeed_task_imgoptm_req', 'hook' => 'LiteSpeed\Img_Optm::cron_auto_request' ), LiteSpeed\Base::O_CRAWLER => array( 'name' => 'litespeed_task_crawler', 'hook' => 'LiteSpeed\Crawler::start' ), // Set crawler to last one to use above results ); foreach ( $_triggers as $id => $trigger ) { add_action( $trigger[ 'name' ], $trigger[ 'hook' ] ); } }/
    Plugin Support litetim

    (@litetim)

    @copperrefections
    /if( is_plugin_active( ‘lite is all 1 line? or is a mistake into copy?
    Use a service like https://pastebin.com/

    Thank you

    Thread Starter Tony Hisir

    (@copperrefections)

    disabled_node code doesn’t run all the time, correct?”
    Yes — correct, It does not run all the time.

    This is the code in my function.php

    add_filter( ‘cron_schedules’, function( $schedules ) {
    /**
    * Increased to 7200 (2 Hours) to protect server resources
    * and prevent high PHP execution time errors.
    */
    $schedules[‘litespeed_crawl_filter’] = array( ‘interval’ => 7200, ‘display’ => ‘LiteSpeed Crawler Every 2 Hours’ );
    return $schedules;
    } );

    /if( is_plugin_active( ‘litespeed-cache/litespeed-cache.php’ ) ) { $_triggers = array( LiteSpeed\Base::O_IMG_OPTM_CRON => array( ‘name’ => ‘litespeed_task_imgoptm_pull’, ‘hook’ => ‘LiteSpeed\Img_Optm::cron_pull’ ), // always fetch immediately LiteSpeed\Base::O_OPTM_CSS_ASYNC => array( ‘name’ => ‘litespeed_task_ccss’, ‘hook’ => ‘LiteSpeed\CSS::cron_ccss’ ), LiteSpeed\Base::O_OPTM_UCSS => array( ‘name’ => ‘litespeed_task_ucss’, ‘hook’ => ‘LiteSpeed\UCSS::cron’ ), LiteSpeed\Base::O_MEDIA_VPI_CRON => array( ‘name’ => ‘litespeed_task_vpi’, ‘hook’ => ‘LiteSpeed\VPI::cron’ ), LiteSpeed\Base::O_MEDIA_PLACEHOLDER_RESP_ASYNC => array( ‘name’ => ‘litespeed_task_lqip’, ‘hook’ => ‘LiteSpeed\Placeholder::cron’ ), LiteSpeed\Base::O_DISCUSS_AVATAR_CRON => array( ‘name’ => ‘litespeed_task_avatar’, ‘hook’ => ‘LiteSpeed\Avatar::cron’ ), LiteSpeed\Base::O_IMG_OPTM_AUTO => array( ‘name’ => ‘litespeed_task_imgoptm_req’, ‘hook’ => ‘LiteSpeed\Img_Optm::cron_auto_request’ ), LiteSpeed\Base::O_CRAWLER => array( ‘name’ => ‘litespeed_task_crawler’, ‘hook’ => ‘LiteSpeed\Crawler::start’ ), // Set crawler to last one to use above results ); foreach ( $_triggers as $id => $trigger ) { add_action( $trigger[ ‘name’ ], $trigger[ ‘hook’ ] ); } }/

    Thread Starter Tony Hisir

    (@copperrefections)

    Hi (@litetim),

    Can you send me the current official list of QUIC.cloud service IP ranges to allowlist, please? I think wordfence might be blocking QUIC.cloud

    For context — we already have QUIC.cloud set as the Trusted Proxy Preset in Wordfence, so IP detection there should be accurate and up to date. Given that, we suspect the CAPTCHA you saw is coming from our QUIC.cloud CDN’s own Traffic Filter (currently set to block all continents except North America) rather than from Wordfence. Can you confirm whether your CCSS service nodes are exempt from a site’s own geo-filter, similar to how Googlebot is excluded?”

    Thank you very much for all your help

    Tony

    • This reply was modified 20 hours, 51 minutes ago by Tony Hisir.
    Thread Starter Tony Hisir

    (@copperrefections)

    Can you send me the current official list of QUIC.cloud service IP ranges to allowlist, please?

    in my.quic.cloud Traffic Filters; CAPTCHA is set to Reject

    Other than North America, everywhere else is blocked .

    WordFence blocks all countries except Canada and the USA. Because these are the only two countries we sell to

    “Our QUIC.cloud CDN Traffic Filter blocks all continents except North America. Is your CCSS service node (eu-service-ctr2.quic.cloud) exempt from our own geo-filter the way Googlebot is, or would our filter block your own infrastructure? This seems to match the CAPTCHA response you found when testing that node.”

    • This reply was modified 21 hours, 5 minutes ago by Tony Hisir.
    • This reply was modified 21 hours, 3 minutes ago by Tony Hisir.
    Plugin Support litetim

    (@litetim)

    Thread Starter Tony Hisir

    (@copperrefections)

    Thank you very much @litetim . I appreciate it.

Viewing 10 replies - 1 through 10 (of 10 total)

You must be logged in to reply to this topic.