Apache-2.2

Apache:如何使我的網站僅在 SSL 上可用,而不是通過 HTTP 和 HTTPS?

  • March 26, 2018

Ubuntu我在伺服器中有一個 tomcat Web 應用程序。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>

如果我專門httpshttps://portal.example.com. 情況是,如果我沒有特別提及但在瀏覽器中https輸入類似的內容,我仍然可以在沒有安全性的情況下訪問該站點。portal.example.com

我怎樣才能解決這個問題?

如果我理解正確,您希望所有對http://portal.example.com/>的訪問都被重寫為<https://portal.example.com嗎?

為此,您只需用 RewriteRule 替換埠 80 VirtualHost 中的 ProxyPass 內容:

&lt;虛擬主機 *: 80&gt;
重寫引擎開啟
RewriteRule ^(.*) $ https://portal.example.com/$1

伺服器名稱 portal.example.com
&lt;/虛擬主機&gt;

這應該足以將所有內容重寫到您的 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 的答案,因為它更簡單且足以應付這種情況。

引用自:https://serverfault.com/questions/866879