Apache-2.2

在同一 VirtualHost 上提供 http(埠 80)和 https(埠 443)

  • November 5, 2015

我需要在 Apache 上設置我的 VirtualHost 以在 http 和 https 上提供服務(使用標準埠)

如果我啟用 SSL 引擎(如下所示) - 在埠 80 上時會出現錯誤。

原因是,網站的某些部分需要 SSL,而其他部分則不需要。我怎樣才能在網站上同時提供 http + https 服務?

這是我的虛擬主機文件….

NameVirtualHost *

<VirtualHost *>
       ServerAdmin webmaster@localhost
       ServerName mysite.co.uk
       DocumentRoot /var/www/mysite/public
       <Directory />
               Options FollowSymLinks
               AllowOverride None
       </Directory>
       <Directory /var/www/mysite/public>
               Options Indexes FollowSymLinks MultiViews
               AllowOverride All
               Order allow,deny
               allow from all
       </Directory>

       ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
       <Directory "/usr/lib/cgi-bin">
               AllowOverride None
               Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
               Order allow,deny
               Allow from all
       </Directory>

       ErrorLog /var/log/apache2/error.log

       # Possible values include: debug, info, notice, warn, error, crit,
       # alert, emerg.
       LogLevel warn

       CustomLog /var/log/apache2/access.log combined
       ServerSignature On

   Alias /doc/ "/usr/share/doc/"
   <Directory "/usr/share/doc/">
       Options Indexes MultiViews FollowSymLinks
       AllowOverride None
       Order deny,allow
       Deny from all
       Allow from 127.0.0.0/255.0.0.0 ::1/128
   </Directory>

    #SSL STUFF...
     SSLEngine on
     SSLCertificateFile /etc/apache2/crts/mysite.crt
     SSLCertificateKeyFile /etc/apache2/crts/mysite.key
     SSLCertificateChainFile /etc/apache2/crts/DigiCertCA.crt


</VirtualHost>

您不能在一個虛擬主機中執行此操作,因為 Apache 需要知道哪個會使用 SSL,哪個不會(旁注:nginx 沒有這個問題,您可以告訴它哪些監聽指令與 SSL 相關;我喜歡它的眾多原因之一)。

我在 Apache 中管理這個的方法是將我所有的非 SSL 相關配置放入一個單獨的文件中,然後將兩個虛擬主機配置為彼此相鄰,每個虛擬主機都包括虛擬主機節內的特定於站點的配置文件,就像這樣:

<VirtualHost 192.0.2.12:80>
   Include /etc/apache2/sites/example.com
</VirtualHost>

<VirtualHost 192.0.2.12:443>
   SSLEngine On
   # etc
   Include /etc/apache2/sites/example.com
</VirtualHost>

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