1. 程式人生 > >Apache配置虛擬主機和多HTTPS服務

Apache配置虛擬主機和多HTTPS服務

多個虛擬主機的配置還是教程看上文,最近閒來無事,研究了一下apache的多虛擬主機的同時新增多個https的服務

事實上apache在配置虛擬主機的時候,我們配置httpd-vhosts.conf這個檔案(我已經將註釋去除掉了,如果你的apache版本在2.2.x以上你大可放心的覆蓋,也可以執行,不過你需要修改下hosts檔案)

NameVirtualHost *:80
<VirtualHost abc.com:80>
    DocumentRoot "D:\abc"
    ServerName abc.com
    <Directory "D:\abc>
        AllowOverride All
        Order Allow,Deny
        Allow from all
    </Directory>
</VirtualHost>
<VirtualHost xyz.com:80>
    DocumentRoot "D:\xyz"
    ServerName xyz.com
    <Directory "D:\xyz>
        AllowOverride All
        Order Allow,Deny
        Allow from all
    </Directory>
</VirtualHost>
<VirtualHost jx.com:80>
    DocumentRoot "D:\jx"
    ServerName jx.com
    <Directory "D:\jx>
        AllowOverride All
        Order Allow,Deny
        Allow from all
    </Directory>
</VirtualHost>

一般的配置也可以可以達到目的了,伺服器上面我們大可不必修改hosts檔案,只需要將ServerName改成你的域名就成,當然你的域名必須做好解析到本臺伺服器上。

好了,虛擬主機的配置過程是十分簡單的,下來再看如何配置多個https服務。

首先請確保你下載的apache是支援openssl的,如果沒有那麼就不要往下看了。(點我下載apache

我們修改httpd.conf檔案中的ssl設定項搜尋這兩行,請一行一行的搜


#LoadModule ssl_module modules/mod_ssl.so
#Include conf/extra/httpd-ssl.conf

將前面的“#”號刪除掉。OK儲存

下面我們再來生成證書,這裡的教程我是以windows作業系統來演示的。

1、執行cmd,進入httpd的bin目錄

cd C:\Program Files\Apache Software Foundation\Apache2.2\bin

2、如果你安裝apache有openssl的話 那麼在這個bin目錄下會有一個openssl.exe的檔案,我們來生成證書
set openssl_conf=./openssl.cnf
openssl genrsa 4096 -des3 > server.key
openssl req -new -key server.key > server.csr

在第二步需要設定相關引數,下面我列出來
Country Name (2 letter code) [AU]:CN #國家程式碼 建議CN
State or Province Name (full name) [Some-State]:GUANGXI #所在省份
Locality Name (eg, city) []:NANNING #城市
Organization Name (eg, company) [Internet Widgits Pty Ltd]:YOURCOMP #你的公司名
Organizational Unit Name (eg, section) []:HELLO #組織或機構
Common Name (e.g. server FQDN or YOUR name) []:abc.com #申請證書的域名 重要
Email Address []:[email protected] #管理員郵箱
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:123456 #交換金鑰
An optional company name []:abc.com #和你申請的域名一致就行了

再生成證書
#生成證書的有效期
openssl req -x509 -days 365 -key server.key -in server.csr > server.crt

你再看bin目錄下面是不是有這三個檔案了

crt

如果有了,OK我們的證書生成完畢。現在就開始配置https了,進入conf/extra資料夾中,找到一個httpd-ssl.conf的檔案用文字工具開啟它

Listen 443
#需要加上這段虛擬主機
NameVirtualHost *:443
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl    .crl
SSLPassPhraseDialog  builtin
#請注意修改你的apache安裝路徑對應的log
SSLSessionCache        "shmcb:C:/Program Files/Apache Software Foundation/Apache2.2/logs/ssl_scache(512000)"
SSLSessionCacheTimeout  300
SSLMutex default
#去除原來的*:443
<VirtualHost xyz.com:443>
 DocumentRoot "d:/xyz_ssl"
    ServerName xyz.com:443
    SSLEngine on
    #最關鍵就是這裡,我們上面生成的證書在這裡就用到了,注意路徑是否能夠找到你的證書
    #我這裡有兩個https所以為了方便你會看到這裡是另外一個證書 xyz.com的證書
    SSLCertificateFile "C:/Program Files/Apache Software Foundation/Apache2.2/conf/xyz_cret/server.crt"
    SSLCertificateKeyFile "C:/Program Files/Apache Software Foundation/Apache2.2/conf/xyz_cret/server.key"
    <Directory "d:/xyz_ssl">
        Options -Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>
<VirtualHost abc.com:443>
 DocumentRoot "d:/abc_ssl"
    ServerName abc.com:443
    SSLEngine on
    #我這裡有兩個https所以為了方便你會看到這裡是另外一個證書 abc.com的證書
    SSLCertificateFile "C:/Program Files/Apache Software Foundation/Apache2.2/conf/abc_cret/server.crt"
    SSLCertificateKeyFile "C:/Program Files/Apache Software Foundation/Apache2.2/conf/abc_cret/server.key"
    <Directory "d:/abc_ssl">
        Options -Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

我已經把註釋都刪掉了,如果不出什麼意外的話,將你的證書路徑找對就可以執行,請注意上面的中文註釋!!!

好了,重啟apache服務,我們來看下效果。

crt1

OK,