Wordpress behind nginx reverse proxy doesnt work in https

8,166

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!

Share:
8,166

Related videos on Youtube

Mascarpone
Author by

Mascarpone

Web Scientist, Applied mathematician, usability engineer, project manager.

Updated on September 18, 2022

Comments

  • Mascarpone
    Mascarpone over 1 year

    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

    • Gekkie
      Gekkie over 9 years
      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
    • Mascarpone
      Mascarpone over 9 years
      how would you do that?
    • Gekkie
      Gekkie over 9 years
      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?
    • Mascarpone
      Mascarpone over 9 years
      where do I find them? I guess it was the default ones
    • Cyle
      Cyle over 8 years
      @Mascarpone Did you ever figure this one out?
    • user181157
      user181157 about 8 years
      same problem here ... @Mascarpone did you manage to solve it?
  • pdwalker
    pdwalker over 7 years
    if the line was put at the bottom of the config file, there will be a problem. this is what fixed the problem for me.
  • Miguel Mota
    Miguel Mota over 6 years
    was struggling with this for hours, until putting it before everything in the code, that did the trick! thanks!
  • Giordano
    Giordano over 6 years
    yes, the placement of the snippet was crucial! Thanks :)
  • Community
    Community about 2 years
    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.