嗨我想爲一個網站提供兩個子域名,並且這兩個子域名都應該在SSL下。我已經購買了通配符SSL證書並安裝了它。在我的虛擬主機文件中,我有5個定義:www(80),app(80/443)和staging(80/443)。所有子域名的工作,下端口80基於名稱的虛擬主機在Apache 2.2.3/CentOS 5.9上使用SSL
這是我的vhosts.conf文件的一個片段:
NameVirtualHost *:80
NameVirtualHost *:443
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName app.---
DocumentRoot /var/www/vhosts/---/app/www/
ErrorLog /var/www/vhosts/---/app/log/error.log
<Directory "/var/www/vhosts/---/app/www">
Options Indexes FollowSymLinks
AllowOverride All
</Directory>
</VirtualHost>
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName app.---
DocumentRoot /var/www/vhosts/---/app/www/
ErrorLog /var/www/vhosts/---/app/log/ssl.log
SSLEngine ON
SSLCertificateFile /etc/httpd/conf.d/ssl/---/ssl.crt
SSLCertificateKeyFile /etc/httpd/conf.d/ssl/---/ssl.key
SSLCertificateChainFile /etc/httpd/conf.d/ssl/---/intermediate.crt
<Directory "/var/www/vhosts/---/app/www">
Options Indexes FollowSymLinks
AllowOverride All
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName staging.---
DocumentRoot /var/www/vhosts/---/staging/www/
ErrorLog /var/www/vhosts/---/staging/log/error.log
<Directory "/var/www/vhosts/---/staging/www">
Options Indexes FollowSymLinks
AllowOverride All
</Directory>
</VirtualHost>
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName staging.---
DocumentRoot /var/www/vhosts/---/staging/www/
ErrorLog /var/www/vhosts/---/staging/log/ssl.log
SSLEngine ON
SSLCertificateFile /etc/httpd/conf.d/ssl/---/ssl.crt
SSLCertificateKeyFile /etc/httpd/conf.d/ssl/---/ssl.key
SSLCertificateChainFile /etc/httpd/conf.d/ssl/---/intermediate.crt
<Directory "/var/www/vhosts/---/staging/www">
Options Indexes FollowSymLinks
AllowOverride All
</Directory>
</VirtualHost>
如果我改變這一行:
<VirtualHost *:443>
要:
<VirtualHost SERVER_IPADDRESS:443>
第一個定義將按預期工作並使用正確的證書。當我重新啓動Apache時,我在終端中收到一條消息,指出有重複條目,只有第一條將被使用。
利用的conf,因爲它是上面我沒有收到終端的任何錯誤或警告,但我已經看到了這在Apache的日誌:
[warn] Init: You should not use name-based virtual hosts in conjunction with SSL!!
從我在網上讀到警告預計並不應該是一個問題。
運行configtest顯示語法OK。
看來問題是用SSL命名的虛擬主機。我已經檢查了3個在線指南並嘗試了各種各樣的東西(使用* .domain.com作爲ServerName作爲ServerName作爲ServerAlias),子作爲指令(app.domain.com:443),但可以' t只需使用一個IP地址即可找出在80和443下爲每個子域服務的正確組合。
我知道這是可能的。關於我失蹤的任何想法?
更新了我的帖子,httpd -v顯示Apache/2.2.23(Unix)。是否默認包含SNI,還是必須自行安裝? – Jonathan
不確定關於centos 5.9。我唯一一次使用SNI,我從新的2.4版本編譯了我自己的apache。它還需要最低版本的openssl才能正常工作,所以這可能是另一件需要檢查的事情。 –
如果您只有一個通配符證書,則不需要SNI工作。如果您有2個或更多證書,SNI用於選擇正確的證書以返回給客戶。 – woollybrain