Network tab "Loading interrupted" - ap.ghost.org returning 403 to my VPS IP

Hi everyone,

I’m setting up the new Network / ActivityPub features on my Ghost instance at https://epicuro.net.

However, the Network tab completely crashes with a “Loading interrupted” error. I checked my server logs and ran a curl test directly from my server:

curl -I https://ap.ghost.org/.well-known/nodeinfo

It returns an HTTP/2 403 Forbidden from the Google Frontend. It seems the IP address of my OVH VPS (141.95.53.122) is blacklisted or blocked by Ghost’s central infrastructure firewall.

Could someone from the staff please look into this and whitelist my IP?

Thank you!

That’s a red herring. You’re sending a GET request to the server and ap.ghost.org is telling you that that’s now allowed.

Can you restart your Ghost instance and watch the logs? It should say something about webhooks in the beginning (Ghost will try to auto-heal ActivityPub webhooks) – that can be very informative sometimes.

Hi Jannis,

Here are the logs right after restarting the instance on Ghost v6.44.1:
…> ghost log -f

Love open source? We’re hiring JavaScript Engineers to work on Ghost full-time.

  • sudo systemctl is-active ghost_hub-curanderie-com
    [2026-06-08 16:23:07] INFO “GET /ghost/api/admin/identities/” 200 50ms
    [2026-06-08 16:23:07] INFO “GET /ghost/api/admin/identities/” 200 52ms
    [2026-06-08 16:23:07] INFO “GET /ghost/api/admin/identities/” 200 51ms
    [2026-06-08 16:23:07] INFO “GET /ghost/api/admin/identities/” 200 55ms
    [2026-06-08 16:23:07] INFO “GET /ghost/api/admin/identities/” 200 62ms
    [2026-06-08 16:23:21] INFO “GET /content/images/size/w256h256/2025/11/social-logo-epicuro.png” 200 3ms
    [2026-06-08 16:24:05] INFO “GET /ghost/api/content/” 404 3ms
    [2026-06-08 16:24:06] INFO “GET /biohacking-tra-scienza-utopia-e-corpo-come-laboratorio/?fbclid=IwY2xjawSTy_RleHRuA2FlbQIxMQBicmlkETF4YlVPRkVnQ2VFZmdKNWlSc3J0YwZhcHBfaWQBMAABHqEbsYqTvCmbJgwB-WJ3Z56-yTi_pHto-nrIAb-kuummEFjtShE9NjUnt1Tt_aem_JpoFY5U8qWdKkxykGoRJyg” 404 10ms
    [2026-06-08 16:24:06] INFO “GET /public/ghost.min.css?v=0b5720d112” 200 2ms
    [2026-06-08 16:24:06] INFO “GET /favicon.ico” 302 3ms
    [2026-06-08 16:24:06] INFO “GET /content/images/size/w256h256/2025/11/social-logo-epicuro.png” 200 3ms
    [2026-06-08 16:26:42] INFO “GET /” 200 123ms
    [2026-06-08 16:27:05] INFO “GET /” 200 137ms
    [2026-06-08 16:27:05] INFO “GET /content/images/size/w256h256/2025/11/social-logo-epicuro.png” 200 3ms
    [2026-06-08 16:27:33] INFO “HEAD /la-mappa-dellassurdo/” 404 13ms
    [2026-06-08 16:27:33] INFO “GET /la-mappa-dellassurdo/” 404 9ms
    [2026-06-08 16:28:01] INFO Worker for job “process-outbox” online
    [2026-06-08 16:28:01] INFO Worker for job process-outbox sent a message: done
    [2026-06-08 16:28:01] WARN Missing mail.from config, falling back to a generated email address. Please update your config file and set a valid from address
    [2026-06-08 16:28:01] INFO [OUTBOX] No pending outbox entries to process
    [2026-06-08 16:29:15] INFO “GET /biodisponibilita-della-fisetina-e-precauzioni-antiemorragiche/” 404 21ms
    [2026-06-08 16:29:17] INFO “GET /public/ghost.min.css?v=0b5720d112” 200 3ms
    [2026-06-08 16:29:23] INFO “GET /robots.txt” 200 2ms
    [2026-06-08 16:29:30] INFO “GET /content/images/size/w1200/2026/06/ChatGPT-Image-3-giu-2026–16_16_46.png” 200 11ms
    [2026-06-08 16:30:13] WARN Ghost is shutting down
    [2026-06-08 16:30:13] WARN Ghost has shut down
    [2026-06-08 16:30:13] WARN Your site is now offline
    [2026-06-08 16:30:13] WARN Ghost was running for 8 hours
    [2026-06-08 16:30:14] INFO Ghost is running in production…
    [2026-06-08 16:30:14] INFO Your site is now available on https://epicuro.net/
    [2026-06-08 16:30:14] INFO Ctrl+C to shut down
    [2026-06-08 16:30:14] WARN Can’t connect to the bootstrap socket (localhost 8000) ECONNREFUSED.
    [2026-06-08 16:30:14] WARN Tries: 0
    [2026-06-08 16:30:14] WARN Retrying…
    [2026-06-08 16:30:15] WARN Can’t connect to the bootstrap socket (localhost 8000) ECONNREFUSED.
    [2026-06-08 16:30:15] WARN Tries: 1
    [2026-06-08 16:30:15] WARN Retrying…
    [2026-06-08 16:30:15] WARN Can’t connect to the bootstrap socket (localhost 8000) ECONNREFUSED.
    [2026-06-08 16:30:15] WARN Tries: 2
    [2026-06-08 16:30:15] WARN Retrying…
    [2026-06-08 16:30:15] WARN Can’t connect to the bootstrap socket (localhost 8000) ECONNREFUSED.
    [2026-06-08 16:30:15] INFO Ghost server started in 1.614s
    [2026-06-08 16:30:15] INFO Database is in a ready state.
    [2026-06-08 16:30:15] INFO Ghost database ready in 1.861s
    [2026-06-08 16:30:15] WARN Missing mail.from config, falling back to a generated email address. Please update your config file and set a valid from address
    [2026-06-08 16:30:16] WARN Theme translations file locales/it.json not found.
    [2026-06-08 16:30:16] WARN Theme translations falling back to locales/en.json.
    [2026-06-08 16:30:16] INFO Invalidating assets for regeneration
    [2026-06-08 16:30:17] INFO [EmailAnalytics] Initialized with SEQUENTIAL processing mode
    [2026-06-08 16:30:18] INFO Adding offloaded job to the inline job queue
    [2026-06-08 16:30:18] INFO Scheduling job clean-gifts at 58 36 3 * * *. Next run on: Tue Jun 09 2026 03:36:58 GMT+0000 (Coordinated Universal Time)
    [2026-06-08 16:30:18] INFO Adding offloaded job to the inline job queue
    [2026-06-08 16:30:18] INFO Scheduling job send-gift-reminders at 19 11 4 * * *. Next run on: Tue Jun 09 2026 04:11:19 GMT+0000 (Coordinated Universal Time)
    [2026-06-08 16:30:18] INFO Adding offloaded job to the inline job queue
    [2026-06-08 16:30:18] INFO Scheduling job clean-expired-comped at 55 24 2 * * *. Next run on: Tue Jun 09 2026 02:24:55 GMT+0000 (Coordinated Universal Time)
    [2026-06-08 16:30:18] INFO Adding offloaded job to the inline job queue
    [2026-06-08 16:30:18] INFO Scheduling job clean-tokens at 29 21 9 * * *. Next run on: Tue Jun 09 2026 09:21:29 GMT+0000 (Coordinated Universal Time)
    [2026-06-08 16:30:18] INFO Pinging Explore with Payload https://explore.ghost.org/api/update {“ghost”:“6.44.1”,“site_uuid”:“ac0009bc-6b49-4f48-82af-ab1a57edbf2b”,“url”:“https://epicuro.net”,“theme”:“ruby-epicuro”,“facebook”:“profile.php?id=61577485033807”,“twitter”:“@epicuro_net”,“posts_total”:106,“posts_last”:“2026-06-08T11:19:52.000Z”,“posts_first”:“2025-10-19T22:25:15.000Z”,“members_total”:16,“mrr”:}
    [2026-06-08 16:30:18] INFO Ghost booted in 4.463s
    [2026-06-08 16:30:18] INFO Adding offloaded job to the inline job queue
    [2026-06-08 16:30:18] INFO Scheduling job update-check at 51 45 13 * * *. Next run on: Tue Jun 09 2026 13:45:51 GMT+0000 (Coordinated Universal Time)
    [2026-06-08 16:30:18] INFO Adding offloaded job to the inline job queue
    [2026-06-08 16:30:18] INFO Scheduling job process-outbox at 47 0/5 * * * *. Next run on: Mon Jun 08 2026 16:30:47 GMT+0000 (Coordinated Universal Time)
    [2026-06-08 16:30:18] INFO Running milestone emails job on Tue Jun 09 2026 16:30:18 GMT+0000 (Coordinated Universal Time)
    [2026-06-08 16:30:18] WARN Can’t connect to the bootstrap socket (localhost 8000) ECONNREFUSED.
    [2026-06-08 16:30:18] WARN Tries: 0
    [2026-06-08 16:30:18] WARN Retrying…
    [2026-06-08 16:30:18] INFO URL Service ready in 2122ms
    [2026-06-08 16:30:18] ERROR No webhook secret found - cannot initialise
    [2026-06-08 16:30:18] WARN Can’t connect to the bootstrap socket (localhost 8000) ECONNREFUSED.
    [2026-06-08 16:30:18] WARN Tries: 1
    [2026-06-08 16:30:18] WARN Retrying…
    [2026-06-08 16:30:18] WARN Can’t connect to the bootstrap socket (localhost 8000) ECONNREFUSED.
    [2026-06-08 16:30:18] WARN Tries: 2
    [2026-06-08 16:30:18] WARN Retrying…
    [2026-06-08 16:30:18] INFO Explore Response 200 OK
    [2026-06-08 16:30:18] WARN Can’t connect to the bootstrap socket (localhost 8000) ECONNREFUSED.
    [2026-06-08 16:30:47] INFO Worker for job “process-outbox” online
    [2026-06-08 16:30:47] INFO Worker for job process-outbox sent a message: done
    [2026-06-08 16:30:47] WARN Missing mail.from config, falling back to a generated email address. Please update your config file and set a valid from address
    [2026-06-08 16:30:47] INFO [OUTBOX] No pending outbox entries to process

As you can see, the auto-heal process triggers this error immediately after the URL service is ready: [2026-06-08 16:30:18] ERROR No webhook secret found - cannot initialise

However, outbound connectivity seems fine since the Explore ping returns a 200 OK: [2026-06-08 16:30:18] INFO Explore Response 200 OK

It looks like the instance is missing the webhook secret entirely. How can I force Ghost to regenerate it or manually inject it into the database/config?

Thanks for your help!

And have you changed your domain recently?

It does sound like an issue the administrators of ap.ghost.org would need to fix though (but not that they need to whitelist your IP).

@Sag can you help with this by any chance?

Hi Jannis and @Sag,

Yes, the instance is currently running on https://epicuro.net, but the setup underwent some configurations and directory adjustments during development. The name of the blog started with the domain hub.curanderie.com that is still resident in the same server but it is not used anymore It’s highly likely that the central server (ap.ghost.org) has a mismatched record or a broken webhook binding for my site.

Here are my current production details to help @Sag clear or reset the registration on your end:

  • Current Domain: https://epicuro.net

  • Ghost Version: 6.44.1

  • Environment: Production

If you can purge or reset the registration entries for epicuro.net on ap.ghost.org, I can restart my instance so the auto-heal system can provision a fresh webhook secret.

Thank you both so much for the incredible support!

Hey @Luca8,

We’ve recently shipped a fix to allow site domain changes to happen without breaking the Network tab.

Looking at the database behind ap.ghost.org and production logs, it seems you’re facing a different problem: your GET /.well-known/jwks.json endpoint is currently pointing to the ActivityPub server, whereas it should be pointing to Ghost:
https://epicuro.net/ghost/.well-known/jwks.json

To fix that, ensure your nginx / Caddy configuration is only pointing /.ghost/activitypub/* and /.well-known/(webfinger|nodeinfo) to ap.ghost.org . Other endpoints should point to Ghost. See examples:

Sag
Product engineer @ Ghost

Closing this topic, as I’m now seeing @index@epicuro.net on the Fediverse :)