0Wordpress LogoWordPress updates progress

I’ve had an issue for a while now where installing wordpress updates doesn’t show any messages or progress. The updates generally do install but it is tricky to know when the updates have finished. There are a few threads online with possible solutions but most of them haven’t been helpful in my case.

Update: See solution at the bottom of this post

When updating plugins the following progress messages should be displayed. In my case they are not showing up.

The update process is starting. This process may take awhile on some hosts, so please be patient.
Enabling Maintenance mode…
Updating Plugin plugin-name
Downloading update from plugins.
Unpacking the update…
Installing the latest version.
Removing the old version of the plugin…
Plugin upgraded successfully.
Akismet updated successfully. Show/Hide Details.
Disabling Maintenance mode. All updates have been completed.
Actions: Return to Plugins page | Return to WordPress Updates.

This applies to all other updates too, of which there is a full list on the wordpress site

Probably the most common cause is PHP zlib compression as described by kungfujosh on the wordpress forums. Sadly I already have zlib compression set to off so that isn’t my issue.

The issue must be a setting in wordpress, php-fpm, or nginx somewhere but I have been unable to locate it so far.
Update: I have ruled out causes in php.ini and the php-fpm config file using a full test VM. There appear to be multiple nginx settings interacting that are causing the issue for me.

The first settings that seem to be relevant are the use of gzip and brotli being turned on. This seems to prevent the page loading progressively. It should be easy enough to turn these off for the updates page using a little custom function in wordpress that sets the content-encoding such that nginx wont compress the files

/******************************************\
* Disable gzip and brotli for updates page *
\******************************************/
function disable_gzip_brotli() {
header('Content-Encoding: identity');
}

if ( basename($_SERVER["SCRIPT_FILENAME"], '.php') == "update-core" ) {
add_action( 'init', 'disable_gzip_brotli' );
}

Unfortunately this on it’s own hasn’t proven the solution to my updating issues as something else causes the page to never display any output, progressive or otherwise. There is another nginx setting that is needed.

After much searching I finally identified the issue in my headers that are set.

A simple change from add_header X-Frame-Options DENY always; to add_header X-Frame-Options SAMEORIGIN always;

Found this useful? Please do let us know by dropping a comment below. If you would like to subscribe please use the subscribe link on the menu at the top right. You can also share this with your friends by using the social links below. Cheers.

Leave a Reply