
У меня есть веб-сервер, на котором запущен сайт example.com. Я настроил перенаправление с http на https на apache; см. ниже
<VirtualHost *:80>
ServerName www.example.com
Redirect permanent / https://www.example.com
</VirtualHost>
<VirtualHost *:443>
ServerName www.example.com
DocumentRoot /usr/www/htdocs
SSLEngine On #etc...
</VirtualHost>
Запрос по http успешно перенаправлен внутренне.
Итак, проблема в том, что внешний запрос должен пройти через Squid Reverse Proxy. И при попытке подключения к http://example .com устанавливается http-соединение. Не https, перенаправление не удается.
Если мы введем URL какhttp://example.com/index.html, соединение успешно перенаправляется на https.
Есть ли у кого-нибудь идеи, как решить эту проблему?
решение1
При попытке подключения к
http://example.com
устанавливается HTTP-соединение, а не HTTPS, и перенаправление не выполняется.
http://example.com
Одна из проблем, с которой вы, похоже, столкнулись, заключается в том, что в конфигурации вашего виртуального хоста Apache нет записей для . www
Префикс технически является поддоменом example.com
и, следовательно, считается отдельным сайтом для разрешения. Исключая любые проблемы со Squid, простым решением будет изменение ваших виртуальных хостов для учета различных вариаций example.com
с помощью ServerAlias
директивы:
# Redirect http://example.com and http://www.example.com
# to https://www.example.com
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect permanent / https://www.example.com
</VirtualHost>
# Serve https://example.com and https://www.example.com
# from the same DocumentRoot
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /usr/www/htdocs
SSLEngine On #etc...
</VirtualHost>
Обратите внимание, что вы также можете перенаправить https://example.com
на https://www.example.com
:
# Redirect http://example.com and http://www.example.com
# to https://www.example.com
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect permanent / https://www.example.com
</VirtualHost>
# Redirect https://example.com to https://www.example.com
<VirtualHost *:443>
ServerName example.com
Redirect permanent / https://www.example.com
SSLEngine On #etc...
</VirtualHost>
# Serve https://www.example.com
<VirtualHost *:443>
ServerName www.example.com
DocumentRoot /usr/www/htdocs
SSLEngine On #etc...
</VirtualHost>
Подробнее о виртуальных хостах на основе имени можно прочитать здесь.здесь.