本文記錄 Apache HTTP Server 從源碼編譯啟用 SSL 模塊、配置基於域名的虛擬主機、生成自簽證書、驗證多站點 HTTPS 訪問的完整流程,適用於開發測試環境快速搭建。
# 下載解壓後
./configure --prefix=/usr/local/apache2 --enable-ssl --enable-so --enable-rewrite
make
make install
--enable-ssl 編入 mod_ssl,--enable-so 支援動態模塊(DSO),--enable-rewrite 支援 URL 重寫。
編輯 /usr/local/apache2/conf/httpd.conf,取消註釋:
Include conf/extra/httpd-vhosts.conf
編輯 /usr/local/apache2/conf/extra/httpd-vhosts.conf:
<VirtualHost *:80>
DocumentRoot "/usr/local/w1"
ServerName www.shnu1.cn
<Directory "/usr/local/w1">
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/usr/local/w2"
ServerName www.shnu2.cn
<Directory "/usr/local/w2">
Require all granted
</Directory>
</VirtualHost>
# Windows: C:\Windows\System32\drivers\etc\hosts
# Linux: /etc/hosts
10.10.134.26 www.w1.com
10.10.134.26 www.w2.com
在對應目錄建立測試頁面:w1.htm、w2.htm。
/usr/local/apache2/bin/apachectl restart
# 瀏覽器訪問 https://www.w1.com、https://www.w2.com
cd /usr/local/apache2/conf
openssl req -new -x509 -nodes -days 365 -out server.crt -keyout server.key
# 依提示填寫:Country, State, City, Org, OU, Common Name (域名), Email
取消 httpd.conf 中註釋:
Include conf/extra/httpd-ssl.conf
編輯 httpd-ssl.conf,配置 443 端口虛擬主機並指向證書:
<VirtualHost *:443>
DocumentRoot "/usr/local/w1"
ServerName www.w1.com
SSLEngine on
SSLCertificateFile "/usr/local/apache2/conf/server.crt"
SSLCertificateKeyFile "/usr/local/apache2/conf/server.key"
<Directory "/usr/local/w1">
Require all granted
</Directory>
</VirtualHost>
| 項目 | 舊做法 | 現代最佳實踐 |
|---|---|---|
| 證書來源 | 自簽 | Let's Encrypt (Certbot) 免費受信證書,自動續期 |
| SSL 協議 | 預設全部 | SSLProtocol -ALL +TLSv1.2 +TLSv1.3 |
| 加密套件 | 預設 | SSLCipherSuite HIGH:!aNULL:!MD5:!3DES |
| HSTS | 無 | Header always set Strict-Transport-Security "max-age=31536000" |
| OCSP Stapling | 無 | SSLUseStapling on + SSLStaplingCache |
| 配置管理 | 手工編輯 | Ansible/Terraform + 模板化,版本控制 |
驗證清單:apachectl configtest 語法檢查 → curl -I https://www.w1.com 返回 200 → 瀏覽器綠鎖圖標 → openssl s_client -connect www.w1.com:443 檢查證書鏈。