Задать вопрос
fdroid
@fdroid
press any key

Как настроить редирект на https при использовании mod_proxy?

Здравствуйте.

Дано:
1.Сервер под Ubuntu Server 16.04, установлен LAMP, работает сайт site1.ru
2.Доменное имя site2.ru
3.NAS Synology в одной локальной сети с сервером.

Требуется:
1. Организовать доступ к веб-интерфейсу NAS по домену site2.ru
2. site1.ru и site2.ru должны работать через https, с автоматическим редиректом http на https.

Первый вопрос решил использованием mod_proxy, доступ к NAS есть, сайт на сервере тоже работает. Но только если явно задавать https://site1.ru и https://site2.ru. Если вводить в строке браузера просто site1.ru и site2.ru, то браузер выдаёт следующее:

Bad Request
Your browser sent a request that this server could not understand.
Reason: You're speaking plain HTTP to an SSL-enabled server port.
Instead use the HTTPS scheme to access this URL, please.


В site1.ru пробовал настраивать редирект через htaccess, применял самые разные нагугленные комбинации, ни одна не сработала. mod_rewrite включен.

А вот что делать с site2.ru, который по сути, просто перенаправляет на другую машину, совершенно непонятно - тут и htaccess применить непонятно где, т.к., естественно, в /var/www никакого site2 просто нет, а виртуальный хост просто описывает проксирование. Включены следующие виртуальные хосты:

site1.ru
<IfModule mod_ssl.c>
   <VirtualHost _default_:443>

     ServerAdmin admin@site1.ru
     ServerName site1.ru
     DocumentRoot /var/www/site1

     <Directory /var/www/site1/>
       Options +FollowSymlinks
       AllowOverride All

      <IfModule mod_dav.c>
        Dav off
      </IfModule>

       SetEnv HOME /var/www/site1
       SetEnv HTTP_HOME /var/www/site1
     </Directory>

     <IfModule mod_headers.c>
          Header always set Strict-Transport-Security "max-age=15768000; preload"
     </IfModule>

     SSLEngine on
     SSLCertificateFile /etc/ssl/site1/domain_name.crt
     SSLCertificateKeyFile /etc/ssl/site1/private.key
     SSLCertificateChainFile /etc/ssl/site1/chain.crt
     Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
   </VirtualHost>
</IfModule>


site2.ru
<VirtualHost *:80 *:443>
  ServerAdmin admin@site2.ru
  DocumentRoot /var/www/html
  ServerName site2.ru
  ServerAlias www.site2.ru
  SSLEngine On
  SSLProxyEngine On
  SSLCertificateFile /etc/ssl/site2/domain_name.crt
  SSLCertificateKeyFile /etc/ssl/site2/private.key
  SSLCertificateChainFile /etc/ssl/site2/chain.crt
  ProxyRequests Off
  ProxyPreserveHost On
  ProxyVia full
  <proxy *>
    Order deny,allow
    Allow from all
  </proxy>
  ProxyPass / http://192.168.0.102:5000/
  ProxyPassReverse / http://192.168.0.102:5000/
</VirtualHost>


Как можно организовать редирект на https без использования htaccess в моём случае? Буду рад указаниям ошибок в моих конфигах.
  • Вопрос задан
  • 3316 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
fdroid
@fdroid Автор вопроса
press any key
Настроил!)

1. У меня был отключен 000-default. Во-первых, привёл его к виду:
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>


и включил:
sudo a2ensite 000-default

После этого, site1.ru стал редиректиться на https. На site2.ru редирект не работал.

В конфиг виртуального хоста для site2.ru добавил после настроек SSL тот же самый код что и для 000-default и привёл к виду:
<VirtualHost *:80 *:443>
  ServerAdmin admin@site2.ru
  DocumentRoot /var/www/html
  ServerName site2.ru
  ServerAlias www.site2.ru
  SSLEngine On
  SSLProxyEngine On
  SSLCertificateFile /etc/ssl/site2/domain_name.crt
  SSLCertificateKeyFile /etc/ssl/site2/private.key
  SSLCertificateChainFile /etc/ssl/site2/chain.crt
  RewriteEngine On                                                                
  RewriteCond %{HTTPS} off                                                  
  RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}  
  ProxyRequests Off
  ProxyPreserveHost On
  ProxyVia full
  <proxy *>
    Order deny,allow
    Allow from all
  </proxy>
  ProxyPass / http://192.168.0.102:5000/
  ProxyPassReverse / http://192.168.0.102:5000/
</VirtualHost>


После чего редирект для https заработал и для site2.ru.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы