Apache:如何使我的网站仅通过 SSL 可用,而不能同时通过 HTTP 和 HTTPS 可用?

Apache:如何使我的网站仅通过 SSL 可用,而不能同时通过 HTTP 和 HTTPS 可用?

我在服务器上有一个 tomcat web 应用程序Ubuntu。该 web 应用程序部署为ROOT。我已安装apache2并通过VirtualHost我将 IP 直接指向 tomcat web 应用程序。因此我可以直接通过 IP(和域)访问该站点,例如125.20.20.50example.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>

https如果我在 URL 中专门使用 ,则 SSL 可以正常工作https://portal.example.com。如果我没有专门提到 ,而是在浏览器中https输入了 ,则我仍然可以在没有安全性的情况下访问该网站。portal.example.com

我怎样才能解决这个问题?

答案1

如果我理解正确的话,你希望所有访问http://portal.example.com/被重写为https://portal.example.com

要做到这一点你只需要用 RewriteRule 替换端口 80 VirtualHost 中的 ProxyPass 内容:

<虚拟主机 *:80>
    RewriteEngine 开启
    重写规则 ^(.*)$ https://portal.example.com/$1

    服务器名称 portal.example.com
</虚拟主机>

这足以将所有内容重写到您的 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 的答案,因为它更简单并且对于这种情况来说已经足够了。

答案2

通常,您只需将用户从纯 HTTP 虚拟主机条目重定向到 https:

<VirtualHost *:80>
    ServerName portal.example.com
    Redirect / https://portal.example.com
</VirtualHost>

答案3

将您的第一个 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 身份运行 Web 服务器。请使用专用用户,并相应地授予其机器上的权限。

相关内容