| SYSTEM INFORMATION | |
|---|---|
| OS type and version | Rocky Linux 9.7 |
| Virtualmin version | 8.0.0 Professional |
I have a couple Ghost websites on my server. Each has been installed via your Web Apps functionality and has been running for around two years. Each has Ghost running in the main root web directory rather than a subdirectory. I regularly use the Ghost Update functionality in Virtualmin’s Web App Installers section of the System Settings.
Yesterday I clicked the button on one of my Ghost sites to upgrade from Ghost 6.13.2 to Ghost 6.15.0. Usually clicking this button runs without a hitch. No errors were reported, however when I visited the website to verify the upgrade, I was greeted by a 403 Forbidden error.
My first thought was to revert the upgrade, which I did on the command line by stopping Ghost (after first checking everything with Ghost Doctor) and then running:
ghost update 6.13.2 --force --no-setup-linux-user
The installer confirmed all was well and up-and-running. So I was surprised to be greeted again by the 403 Forbidden error, even though no errors were reported on the command line. I tried updating to 6.15.0 again, and of course received the same results.
I poked around Apache’s logs (since there were no new Ghost error logs), and compared this Ghost site that wasn’t working to the other working Ghost site that I hadn’t yet upgraded. I found the problem, but have yet to be able fully to fix it!
When I looked under the domain’s Web Configuration menu and selected both Configure Apache Website and also Configure Apache SSL Website, there was a missing entry in the Per-Directory Options, which should have been the following (after changing the Port to the one for this install):
Proxy balancer://mongrel3000
I added that entry to both SSL and non-SSL configuration.
I also went in and added the appropriate Directive:
BalancerMember http://localhost:3000
I also noted that under Aliases & Redirects, there were related missing entries that I added:
balancer://mongrel3000
I restarted Apache for all my changes to take effect. No errors doing so, happily! I did all of the above without knowing quite what I was doing, other than mirroring the working Ghost installation that I had not yet upgraded.
And now my Ghost homepage did start showing up, but only with its text content (so with none of its connected assets like styles and images). When I tried to visit the Ghost Dashboard, I now got an Internal Server Error rather than a 403 Forbidden error.
I tried every which way to figure out how to fix this myself! I logged in as root to my server and poked around with listing proxies there. I noticed something amiss when I ran this command:
sudo virtualmin list-proxies --domain redacted.com --multiline
/.well-known
Proxying: No
Websockets: No
/
Balancer: mongrel3000
Proxying: Yes
Script name: ghost
Script version: 6.15.0
Websockets: No
There’s a missing URL entry above, but when I tried to add it with this command, it still didn’t show up, even though I received no error after issuing this command:
sudo virtualmin modify-proxy --domain redacted.com --path / --url http://localhost:3000
I tried this using the GUI too, and even when I add that URL and save, it disappears without error ![]()
There was one more thing that I checked, inside the httpd.conf file for this website, there were missing entries which I added:
<Proxy "balancer://mongrel3000">
BalancerMember http://localhost:3000
</Proxy>
ProxyPass / balancer://mongrel3000
ProxyPassReverse / balancer://mongrel3000
The only entry that wasn’t missing was this one: ProxyPass /.well-known !
How on earth did all these entries disappear simply when I clicked the upgrade button for Ghost from 6.13.2 to 6.15.0? The upgrade button has never done this before, and again, no errors were reported, so I expected to simply find an updated Ghost install as usual.
As a last-ditch attempt to see what was going on, I created a fresh Ghost install using the Web App Installer into the root directory of a domain I’m not actively using but that was all setup in Virtualmin. Ghost installed just fine, but I noticed something particularly about this new install’s proxy settings. Instead of mongrel it’s now proxy as in:
Proxy balancer://proxy3001
I had to throw in the towel for the night at this point, being over my head in terms of knowledge of proxying Node servers with Apache. I would love to know how to resurrect my website, which is currently still not working since deciding to update it last night! Ghost reports it is running just fine on port 3000, but somewhere I’ve missed adding or fixing a proxy entry, hence the broken homepage (errors fetching any linked assets) and the Internal Server Errors when trying to access Ghost’s Dashboard URL.
