Desired setup
A SWAG reverse proxy should forward requests to WordPress running in the official wordpress docker image. The URL which is served by the reverse proxy is not the domain root, but a subfolder “blog”: https://www.example.com/blog.
What does not work
Letting the docker image itself serve wordpress in the root folder and write some clever proxy / rewrite rules. At first it seems to work, but when it comes wp-admin URLs like https://www.example.com/blog/wp-admin a magic redirection happens to https://www.example.com/wp-admin which points to outside the WordPress installation.
Fiddling around with RELOCATE
, WP_HOME
and WP_SITEURL
does not solve the problem.
As it turns out WordPress needs to know the fact that it is installed in a subfolder, quote:
What you’ll want to do is run your WordPress container with WORKDIR set to /var/www/html/lab so it knows it is in a subdirectory and acts accordingly.
Description of setup
In SWAG config add nginx/site-confs/www_example_com.conf
with the following content (taken default.conf as base and stripped comments):
server { listen 443 ssl; listen [::]:443 ssl; server_name www.example.com; include /config/nginx/ssl.conf; client_max_body_size 128M; location = / { return 301 $scheme://$host/blog/; } location ^~ /blog/ { include /config/nginx/proxy.conf; include /config/nginx/resolver.conf; set $upstream_app wordpress; set $upstream_port 80; set $upstream_proto http; proxy_pass $upstream_proto://$upstream_app:$upstream_port; } }
In the WordPress docker image make sure that the WordPress installation is not in /var/www/html
but in /var/www/html/blog
and that the working directory is set to /var/www/html/blog
. Here an example when using Portainer:
In this example a bind mount is used and there is a folder /portainer/Files/AppData/Config/wordpress/blog
on the host.