Hi all!
I’m looking for some help configuring Apache as a reverse proxy for ap.ghost.org
- What’s your URL? gardinerbryant.com
- What version of Ghost are you using? 6.10.3
I have Ghost installed as a Docker image with Apache as the reverse proxy (for legacy reasons).
Here’s my Apache config:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName gardinerbryant.com
ServerAlias www.gardinerbryant.com
Alias "/static" "/srv/ghost.gardinerbryant.com/static/"
ProxyRequests On
<Directory "/srv/ghost.gardinerbryant.com/static">
Require all granted
</Directory>
ProxyPreserveHost On
## Static content
ProxyPass "/static" !
SSLProxyEngine On
ProxyPreserveHost Off
SSLProxyVerify none
SSLProxyCheckPeerCN Off
SSLProxyCheckPeerName Off
SSLProxyCheckPeerExpire Off
<Proxy "https://ap.ghost.org:443">
RequestHeader set Host "ap.ghost.org"
RequestHeader set "X-Forwarded-Host" "expr=%{SERVER_NAME}"
RequestHeader set "X-Forwarded-Proto" "https"
RequestHeader set "X-Forwarded-Port" 443
RequestHeader set "X-Forwarded-For" "expr=%{REMOTE_ADDR}"
RequestHeader set "X-Real-IP" "expr=%{REMOTE_ADDR}"
RequestHeader set "Authorization" "expr=%{HTTP:Authorization}"
ProxyPassReverseCookieDomain "ap.ghost.org" "gardinerbryant.com"
Header set "Cache-Control" "no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0"
Header set "Surrogate-Control" "no-transform, no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0"
</Proxy>
ProxyPass "/.ghost/activitypub" https://ap.ghost.org:443/.ghost/activitypub
ProxyPassReverse "/.ghost/activitypub" https://ap.ghost.org:443/.ghost/activitypub
ProxyPass "/.well-known/webfinger" https://ap.ghost.org:443/.well-known/webfinger
ProxyPassReverse "/.well-known/webfinger" https://ap.ghost.org:443/.well-known/webfinger
ProxyPass "/.well-known/nodeinfo" https://ap.ghost.org:443/.well-known/nodeinfo
ProxyPassReverse "/.well-known/nodeinfo" https://ap.ghost.org:443/.well-known/nodeinfo
<Proxy "http://127.0.0.1:2368/"> # 2368
RequestHeader set Host "${SERVER_NAME}"
RequestHeader set "X-Forwarded-Host" "expr=%{SERVER_NAME}"
RequestHeader set "X-Forwarded-Proto" "expr=%{REQUEST_SCHEME}"
RequestHeader set "X-Forwarded-Port" 443
RequestHeader set "X-Forwarded-For" "expr=%{REMOTE_ADDR}"
RequestHeader set "Cache-Control" "no-store"
RequestHeader set "X-Real-IP" "expr=%{REMOTE_ADDR}"
</Proxy>
## Ghost Container
ProxyPass "/" http://127.0.0.1:2368/
ProxyPassReverse "/" http://127.0.0.1:2368/
#RequestHeader set "X-Forwarded-SSL" expr=%{HTTPS}
# Header set "Access-Control-Allow-Origin" "*"
ErrorLog ${APACHE_LOG_DIR}/gardinerbryant.com_error.log
CustomLog ${APACHE_LOG_DIR}/gardinerbryant.com_access.log combined
RewriteEngine on
# Some rewrite rules in this file were disabled on your HTTPS site,
# because they have the potential to create redirection loops.
RewriteCond %{SERVER_NAME} =www.gardinerbryant.com
RewriteRule ^ https://gardinerbryant.com%{REQUEST_URI} [END,NE,R=temp]
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/gardinerbryant.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/gardinerbryant.com/privkey.pem
</VirtualHost>
</IfModule>
When I try to access any of the proxied directories directly in my browser, I get this error:
{"error":"Forbidden","code":"SITE_MISSING"}
When I try accessing gardinerbryant.com/ghost/#/activitypub/reader, I see this as the response for the failed requests:
{"message":"Invalid URL"}
Finally, when I go to switch the Network tab off and then on again in the settings, I see this error in Ghost’s logs:
[2025-12-26 22:40:17] ERROR No webhook secret found - cannot initialise
When I searched for the above error message I found this post but it looks like this might be an issue on the remote server side?
I’m not 100% sure what my next steps should be. Any help would be appreciated!