3

I'm trying to run wordpress on a docker based cloud. The setup is:

Wordpress Cloud Setup

There is a server running a mysql array, which serves a container with Wordpress Running on Nginx. The setup is copied from this dockerfile. The goal of this setup is to achieve a high throughput and be compatible with our cloud setup.

The wordpress container has a local ip, in the same subnet as the mysql array and Nginx reverse proxy, and a public port to run http (not https).

The reverse proxy is configured to run SSL for the wordpress container. Navigation works on both http and https, but when I try to log in the dashboard with HTTPS, I get this error:

You do not have sufficient permissions to access this page.

The only meaningful error I found happens when I log in on the dashboard, on HTTP:

[04-Nov-2014 23:16:13 UTC] PHP Notice: Undefined index: HTTP_X_FORWARDED_PROTO in /usr/share/nginx/www/wp-config.php on line 86

but the dashboard works correctly on http.

In Wordpress configuration file I had to add the line:

/* SSL Proxy */

if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') $_SERVER['HTTPS']='on';

And I think this is the culprit. I found this tip in the official wordpress documentation, and without it HTTPS doesnt load the CSS, either logged or not logged. I think maybe I should modify this line to suit my configuration?

Either this, or the nginx reverse proxy configuration file, I have no idea.

The nginx configuration file in the wordpress + nginx container is quite standard, and it's copied from here.

Please help me :D

Mascarpone
  • 872
  • 3
  • 9
  • 27
  • 1
    It seems your nginx proxy doesnt send the correct headers (or the nginx inside the WP container doesnt forward that header into PHP... ) Try debugging the output of the NGINX reverse proxy and then looking into what comes into the WP container – Gekkie Nov 06 '14 at 09:38
  • how would you do that? – Mascarpone Nov 10 '14 at 10:28
  • 1
    replace the various backends to a simple PHP script which dumps the headers (```$_SERVER``` i.e.) and see what happens... It might be that one of you nginx-servers just messes up the headers? – Gekkie Nov 10 '14 at 12:18
  • Can you paste the contents of the Nginx server configuration `fastcgi_params`? – ojrask Dec 19 '14 at 11:58
  • where do I find them? I guess it was the default ones – Mascarpone Dec 21 '14 at 12:25
  • @Mascarpone Did you ever figure this one out? – Cyle Nov 23 '15 at 22:36
  • same problem here ... @Mascarpone did you manage to solve it? – user181157 Mar 11 '16 at 22:03

2 Answers2

5

I had some problem, I resolved in this way:

in my wp-config.php,

I added these lines:

if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) $_SERVER['HTTPS']='on';

BEFORE everything in the code.

Hope it helps!

Mauro
  • 51
  • 1
  • 2
0

I have used this block of code in wp-config.php for nginx reverse proxy => Apache

// When behind reverse proxy
if (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
    $_SERVER['HTTPS']= 'on';
}

if (!empty($_SERVER['HTTP_X_FORWARDED_HOST'])) {
    $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
}
  • Your answer could be improved with additional supporting information. Please [edit] to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community Mar 12 '22 at 16:02