apache https 適用於其他 http 虛擬主機
我已經搜尋了很多,我也嘗試了很多東西,但仍然找不到問題。
我在 ubuntu 伺服器 12.04 lts 上安裝了 apache 2.2.22 伺服器。我有許多 http 虛擬主機和 2 個 https 虛擬主機。一切正常,但奇怪的是,如果我在瀏覽器上提供我的一個 http 站點,而使用 https,它會將我重定向到實際的 https 站點。這很尷尬,我真的不知道是什麼原因造成的。
有人也遇到過嗎?你能幫忙嗎?提前致謝
不清楚你在問什麼,但有兩個潛在的問題:
- Apache 將嘗試找到最佳的 vhost 來匹配,如果沒有其他匹配,則預設為第一個匹配 IP 地址和埠的 vhost,這有時會給不理解這一點的人帶來意想不到的結果。
因此,如果您有以下情況:
NameVirtualHost *:80 <VirtualHost *:80> ServerName www.example1.com DocumentRoot /www/example1/htdocs </VirtualHost> <VirtualHost *:80> ServerName www.example2.com DocumentRoot /www/example2/htdocs </VirtualHost> <VirtualHost *:443> ServerName www.example1.com DocumentRoot /www/example1/htdocs </VirtualHost>
當您嘗試訪問https://www.example2.com時,您可能會感到驚訝。您可能認為它要麼出錯,要麼通過 https 提供 example2 站點,但實際上 Apache 所做的是在埠 443 上查找匹配項,當它找不到完全匹配項時,它預設為第一個匹配項,因此提供與https://www.example1.com相同。
2)或者,如果你的意思是你有這個配置:
NameVirtualHost *:80 <VirtualHost *:80> ServerName www.example1.com DocumentRoot /www/example1/htdocs </VirtualHost> <VirtualHost *:80> ServerName www.example2.com DocumentRoot /www/example2/htdocs </VirtualHost> NameVirtualHost *:443 <VirtualHost *:443> ServerName www.example1.com SSLCertificateFile /ssl/cert1.crt DocumentRoot /www/example1/htdocs </VirtualHost> <VirtualHost *:443> ServerName www.example2.com SSLCertificateFile /ssl/cert2.crt DocumentRoot /www/example2/htdocs </VirtualHost>
那麼在這種情況下,您會希望https://www.example2.com可以工作。
問題是通常 https 請求最初是針對 IP 地址發出的,沒有傳遞伺服器名,因此 Apache 不知道您想要哪個,所以它再次假定第一個並傳回 cert1.crt 以設置會話,這可能不正確。https 會話建立後,它會獲取 ServerName 並可以正確路由請求。
一個名為 SNI(伺服器名稱指示)的 https 更新允許 ServerName 與初始請求一起傳遞,因此將使用正確的證書,但這取決於您使用 OpenSSL 0.9.8f 或更高版本的伺服器以及您使用的瀏覽器(尤其是不支持此功能的 Windows XP 上的 IE)。如果這是一個問題(假設它涵蓋兩個域,則對兩者使用相同的證書,或者為每個域使用不同的 IP 地址)。