Суть проблемы
Итак у нас есть окружение:
_____
___/_ \____
/__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. Бесконечных редиректов нет.