У меня есть веб-приложение Tomcat в Ubuntu
сервер. Веб-приложение развертывается как ROOT
. Я установил apache2
и через VirtualHost
Я указал IP прямо на веб-приложение tomcat. Таким образом, я могу получить доступ к сайту через IP (и домен) напрямую, например 125.20.20.50
или example.com
.
Пожалуйста, проверьте файл ниже, который является 000-default.conf
в \etc\apache2\sites-enabled\
.
<VirtualHost *:80>
ProxyPreserveHost On
# Servers to proxy the connection, or;
# List of application servers:
# Usage:
# ProxyPass / http://[IP Addr.]:[port]/
# ProxyPassReverse / http://[IP Addr.]:[port]/
# Example:
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
ServerName localhost
</VirtualHost>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
DocumentRoot /opt/apache-tomcat-7.0.79/webapps/ROOT/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine On
# Set the path to SSL certificate
# Usage: SSLCertificateFile /path/to/cert.pem
SSLCertificateKeyFile /etc/apache2/ssl/key.key
SSLCertificateFile /etc/apache2/ssl/certificate.crt
SSLCertificateChainFile /etc/apache2/ssl/STAR_xxx_com.ca-bundle
ProxyPreserveHost On
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
ServerName localhost
</VirtualHost>
SSL работает нормально, если я специально использовал https
в URL-адресе, например https://portal.example.com
. Дело в том, что я все еще могу получить доступ к сайту без защиты, если я специально не упомянул https
но набрал что-то вроде portal.example.com
в браузере.
Как я могу это исправить?
Обычно вы просто перенаправляете пользователей на https из простой записи виртуального хоста HTTP:
<VirtualHost *:80>
ServerName portal.example.com
Redirect / https://portal.example.com
</VirtualHost>
Если я вас правильно понял, вы хотите, чтобы все доступы к http://portal.example.com/ переписывается на https://portal.example.com?
Для этого вам просто нужно заменить ProxyPass в порту 80 VirtualHost на RewriteRule:
<VirtualHost *:80> RewriteEngine on RewriteRule ^(.*)$ https://portal.example.com/$1 ServerName portal.example.com </VirtualHost>
Этого должно быть достаточно, чтобы все переписать на вашей HTTPS-странице.
ПРИМЕЧАНИЕ. При этом остальная часть URL-адреса сохраняется, поэтому это означает http://portal.example.com/random_page
становится https://portal.example.com/random_page
Если вы просто хотите перенаправить каждый HTTP-доступ на корневую HTTPS-страницу (так http://portal.example.com/random_page
станет https://portal.example.com/
), вы должны принять ответ @ HBruijn, поскольку он намного проще и достаточен для этого случая.
Измените свой первый VirtualHost на
<VirtualHost *:80>
ServerName portal.example.com
DocumentRoot /opt/apache-tomcat-7.0.79/webapps/ROOT/
Redirect /secure https://portal.example.com
</VirtualHost>
PS: никогда не запускайте свой веб-сервер как root. Используйте специального пользователя и соответствующим образом предоставьте ему права на вашем компьютере.