Заменить Base URL и Request URI в зависимости от $_SERVER['SERVER_ADDR']

Главные вкладки

Аватар пользователя Lord of Cats Lord of Cats 24 мая 2021 в 13:45

Добрый день.

Подскажите, пожалуйста, как настроить конфигурацию Drupal 8 под TLS-шлюз.

Есть обычный адрес сайта:

https://site.ru/

Для этого же сайта есть защищенный TLS-шлюз, который пробрасывает обычный адрес сайта по новому адресу:

https://tls.site.ru/subdirectory/

Сайт начал открываться по новому адресу, но с неправильными ссылками на веб-ресурсы.

Например, в пользовательских формах action ведет по старому адресу (как в админ. панели так и в формах на клиентской части). Пример:

<form action="/node/1?destination=/node/1" ...

Нужно сделать так, чтобы в значении атрибута action было значение "/subdirectory/node/1?destination=/node/1", аналогично, в ссылках на css-стили и js-скрипты в начало пути добавлялось "/subdirectory".

Для Drupal 7 у меня в /var/www/html/sites/default/settings.php эта проблема решалась так:

<?php
$base_url 
'https://site.ru';  // NO trailing slash!

// URL TLS

$url_tls 'tls.site.ru';

// URL TLS Path
$url_tls_path '/subdirectory';

// URL TLS Gateway
$url_tls_gateway 'https://' $url_tls $url_tls_path;

// Вход осуществляется по защищенному каналу или нет
$is_tls_gateway FALSE;

// IP-адрес сервера, на котором выполняется текущий скрипт
$server_addr $_SERVER['SERVER_ADDR'];

// IP-адрес интерфейса TLS
$ip_tls '10.10.100.1';

 if (

$server_addr === $ip_tls) {

    

// Заменить Base URL
    
$base_url $url_tls_gateway;

    

// Заменить Request URI
    
$_SERVER['REQUEST_URI'] = $url_tls_path $_SERVER['REQUEST_URI']; // не работает в Drupal 8

    // TLS используется
    

$is_tls_gateway TRUE;
}

// Используется ли TLS Gateway
define('IS_TLS_GATEWAY'$is_tls_gateway);
?>

В Drupal 8 таким способом переприсвоить $_SERVER['REQUEST_URI'] не удается.

Подскажите, пожалуйста, как в Drupal 8 решается этот вопрос?

Комментарии

Аватар пользователя bsyomov bsyomov 24 мая 2021 в 14:09

А зачем вообще дважды шифровать траффик? Может просто настройками сервера требовать на https достаточно стойкого шифрования. Там же можно реализовать авторизацию клиентскими сертификатами, если это нужно...

Ну и раз меняется домен, то зачем и url-то менять?

Аватар пользователя Lord of Cats Lord of Cats 24 мая 2021 в 14:33

Я, как программист, тоже не вижу в этом смысла. Тут вопрос касается больше юридической плоскости. URL меняет ( и ломает ссылки Smile ) криптошлюз ViPNet TLS Gateway.

Аватар пользователя bsyomov bsyomov 24 мая 2021 в 15:41

Неужели там нет возможности просто домен обслуживать без добавки к url? Точно не в кривости настроек дело, а именно в ПО?

Ну и для таких целей такое ПО не совсем уместно в целом. Обычно, оно для того, чтобы весь трафик пользователя завернуть, чтобы была уверенность в надёжности канала, но тут для этого сайта и так есть https, которым можно управлять со своей стороны, и настроить соединение с нужным уровнем параноидальности, да и алгоритмы нужные выбрать - даже ГОСТ шифрование, если у вас какая-нибудь гос. организация и всё в это упирается. Smile

Аватар пользователя Lord of Cats Lord of Cats 27 мая 2021 в 11:02

Нет, не регулируется из интерфейса TLS. Может и кривость настроек settings.php, я об этом и пишу. Сейчас работает только для обычного сайта. Для примера это https://site.ru/

Может этот вопрос решается путем конфигурации Nginx? Например, внутренний редирект?

Примерно на Apache это выглядело бы так (не уверен в правильности):

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteCond %{HTTP_HOST} ^tls\.site\.ru$
   RewriteCond %{REQUEST_URI} !^/
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^(.*) subdirectory/$1  [L]
</IfModule>
Аватар пользователя bsyomov bsyomov 27 мая 2021 в 19:32

Я о том, что действительно в интерфейсе шлюза не убрать /subdirectory, не заменить, например на / просто? Без этой /subdirectory не было бы и проблемы, которую вы пытаетесь старательно решать.