Apache-2.2
在同一 VirtualHost 上提供 http(埠 80)和 https(埠 443)
我需要在 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>