我在服务器上有一个 tomcat web 应用程序Ubuntu
。该 web 应用程序部署为ROOT
。我已安装apache2
并通过VirtualHost
我将 IP 直接指向 tomcat web 应用程序。因此我可以直接通过 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>
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 服务器。请使用专用用户,并相应地授予其机器上的权限。