1

While installing an existing Wordpress installation in a docker container, I've been unable to access the wp-admin pages. The site and pages load perfectly but when browsing to https://example.com/wp-admin that url is redirected to http://example.com:8080/wp-admin and is unable to load since nothing is hosted on that port (note the http/https).

The Wordpress site is copied into the docker image that is then executed on google cloud run. Cloud run redirects port 80 to 443. I've already tried setting the WP_SITEURL and WP_HOME in the database and wp-config. FORCE_SSL_ADMIN is set to true in wp-config.

The container's apache webserver runs on port 8080. That's probably where the wrong port number is taken from somehow. Cloud run proxies 443 -> 8080. I'm using the latest https://hub.docker.com/_/wordpress image with my own wordpress copied in and the following extra modification that made things work so far:

wp-config (only relevant things, the rest is the db connection):

## Wordpress container HTTPS fixes for google cloud
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
    $_SERVER['HTTPS']='on';

define('DOMAIN_CURRENT_SITE', $_SERVER['HTTP_HOST']);
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);
define('FORCE_SSL_ADMIN', true);

define('WP_SITEURL', 'https://example.com/');
define('WP_HOME', 'https://example.com/');

/var/www/html/.htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Dockerfile ($PORT is port 8080. $PORT is a default env var set by google cloud, the entrypoint does db setup and then starts apache2):

FROM wordpress:latest
#copy the website and configuration
COPY ./wordpress/ /var/www/html
COPY ./dockerbuild-deps/cloud-run-entrypoint.sh /usr/local/bin/
COPY ./dockerbuild-deps/.htaccess ./dockerbuild-deps/wp-config.php /var/www/html/
COPY ./dockerbuild-deps/.htaccess /var/www/html/wp-admin/
# Use the PORT environment variable in Apache configuration files and make the entrypoint works
RUN sed -i 's/80/${PORT}/g' /etc/apache2/sites-available/000-default.conf /etc/apache2/ports.conf && chmod +x /usr/local/bin/cloud-run-entrypoint.sh

ENTRYPOINT ["cloud-run-entrypoint.sh","docker-entrypoint.sh"]
CMD ["apache2-foreground"]

What changes do I need to make to access wp-admin on https://example.com/wp-admin without a redirect back to port 8080 and http?

2
  • 1
    $_SERVER['HTTP_HOST'] will also contain the port number if present on the request, so maybe you need to check for this in your script?
    – MrWhite
    Commented Nov 23, 2020 at 11:51
  • I changed $_SERVER['HTTP_HOST' to https://example.com/ but it didn't seem to have any effect. There is still a 301 redirect to http://example.com:8080/wp-admin (tested in incognito mode on 2 computers). Commented Nov 23, 2020 at 12:42

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Browse other questions tagged or ask your own question.