WP with Nginx SSL proxypass

Суть проблемы

Итак у нас есть окружение:

      _____
  ___/_    \____
/__Internet  ___\
\__\_________/
       |
   ____|_____
  |(port:443)|
  |  NGINX   |
  |   SSL    |____________________
  |__________|                    |
       |      \                  \ /
   ____|_____  \______________    |
  | (port:80)| | (port:3000)  |  ...
  |   APACHE | | node(express |
  |__________| |______________|

Получаем конфигурацию

NGINX

 #http mysprav.ru
  server {
    listen *:80;
    listen [::]:80;
    server_name  *.mysprav.ru;

    #redirect to https
    if ( $host !~ ^www\. ) {
      return 301 https://www.$host$request_uri;
    }
    return 301 https://$host$request_uri;
 }

 upstream mysprav {
    server 10.6.1.186:80;
    keepalive_timeout 120s;
}

 upstream mymkb10 {
    server 10.6.1.53:3000;
    keepalive_timeout 120s;
}
...

server {
    listen       443 quic reuseport;
    listen       443 http2 ssl;
    listen       [::]:443 quic reuseport;
    listen       [::]:443 http2 ssl;

    ....
   if ($host ~* "(www\.)?mymkb10\.ru") {
      set $upstream_name mymk10;
   }

   if ($host ~* "(www\.)?mysprav\.ru") {
      set $upstream_name mysprav;
   }

Apache:


    DocumentRoot "/var/www/webroot/mysprav"
    ServerName www.mysprav.ru

С nodejs это работало хорошо.

Но потом появился узел apache с wordpress (на изображении выше это первый узел после NGINX). Соответсвенно нужно было поставить опции для WP siteurl и home и я поставил обе опции равными https://www.mysprav.ru .

И в этот момент появились постоянные редиректы.

Проблема в том, что в настройках WP стоит протокол httpS, но в реальности apache работает с http, а с SSL работает только NGINX. И WP видя что он на "неправильном url http:…" делал редирект на "верный url httpS…".

В общем сайт не работал 🙁 .

Я нашел решение в этой статье singularaspect.com/nginx-apache-ssl-and-wordpress/.

В общем добавил всеголишь одну строчку в файле настройки Apache httpd.conf


  DocumentRoot "/var/www/webroot/mysprav"
  ServerName www.mysprav.ru

#Добавленная строчка
  SetEnv HTTPS 1

И всё заработало. Теперь функция is_ssl() возвращает true. Бесконечных редиректов нет.

Добавить комментарий

Ваш адрес email не будет опубликован.