Назад | Перейти на главную страницу

Apache: как сделать свой веб-сайт доступным только через SSL, а не через HTTP и HTTPS?

У меня есть веб-приложение 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. Используйте специального пользователя и соответствующим образом предоставьте ему права на вашем компьютере.