Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> 關於伺服器

Apache 利用 IP 別名單一網卡托管多個 SSL 虛擬主機完整實作

編輯:關於伺服器

傳統認知認為「一個 IP 只能綁一張 SSL 憑證」,導致托管多個 HTTPS 站點需多張網卡或多 IP。實則透過IP 別名(IP Aliasing),單一實體網卡即可綁定多個邏輯 IP,配合 Apache NameVirtualHost + <VirtualHost *:443> 機制,實現單伺服器多 SSL 站點共存。本文以實戰案例完整說明 Linux/Solaris 設定與 Apache 虛擬主機配置。

業務場景:單一反向代理服務多個內部 Web 應用

  • HR 福利系統:hr.company.com,需對外 HTTPS。
  • 新財務門戶:finance.company.com,同樣需 HTTPS。
  • 限制:機房物理空間、預算、僅一張公網網卡、兩張憑證域名不同、不允許瀏覽器彈出憑證錯誤警告。

核心方案:IP 別名 + Apache 基於 IP 的虛擬主機

步驟 1:Linux 建立 IP 別名 (eth0:1, eth0:2...)

# 臨時生效(重開機失效)
ifconfig eth0:1 192.168.10.10 netmask 255.255.255.0 up
ifconfig eth0:2 192.168.10.11 netmask 255.255.255.0 up

# 持久化(RedHat/CentOS 6/7)
cat > /etc/sysconfig/network-scripts/ifcfg-eth0:1 <<EOF
DEVICE=eth0:1
BOOTPROTO=static
IPADDR=192.168.10.10
NETMASK=255.255.255.0
ONBOOT=yes
EOF

cat > /etc/sysconfig/network-scripts/ifcfg-eth0:2 <<EOF
DEVICE=eth0:2
BOOTPROTO=static
IPADDR=192.168.10.11
NETMASK=255.255.255.0
ONBOOT=yes
EOF

# 重啟網路服務
systemctl restart network
核心參數檢查: cat /proc/net/alias* 檔案存在即表示核心支援 IP 別名。現代 Linux 核心 (2.6+) 皆內建支援。

步驟 2:Solaris 建立虛擬 IP

ifconfig eth0:1 plumb
ifconfig eth0:1 192.168.10.10 netmask 255.255.255.0 up
# 持久化
echo "192.168.10.10" > /etc/hostname.eth0:1

步驟 3:更新 /etc/hosts 與 DNS

192.168.10.10  hr-proxy.company.com
192.168.10.11  finance-proxy.company.com

公開 DNS 將 hr.company.com、finance.company.com 解析至對應公網 IP(或同一公網 IP 配合防火牆 DNAT 導向內網別名 IP)。

步驟 4:Apache httpd-ssl.conf 虛擬主機配置

Listen 443

NameVirtualHost 192.168.10.10:443
NameVirtualHost 192.168.10.11:443

<VirtualHost 192.168.10.10:443>
    DocumentRoot "/web/hr/docs"
    ServerName hr.company.com:443
    SSLEngine on
    SSLCertificateFile "/etc/httpd/ssl/hr.company.com.crt"
    SSLCertificateKeyFile "/etc/httpd/ssl/hr.company.com.key"
    # 反向代理至內部 HR 應用伺服器
    ProxyPass / https://10.0.1.50/
    ProxyPassReverse / https://10.0.1.50/
</VirtualHost>

<VirtualHost 192.168.10.11:443>
    DocumentRoot "/web/finance/docs"
    ServerName finance.company.com:443
    SSLEngine on
    SSLCertificateFile "/etc/httpd/ssl/finance.company.com.crt"
    SSLCertificateKeyFile "/etc/httpd/ssl/finance.company.com.key"
    ProxyPass / https://10.0.1.60/
    ProxyPassReverse / https://10.0.1.60/
</VirtualHost>

關鍵技術細節與避坑指南

1. 混雜模式風險

部分麵網卡啟用多 IP 後會進入混雜模式,捕獲同網段所有封包,增加 CPU 負擔與安全風險。
對策: 使用支援 VLAN/多隊列的智慧型網卡(Intel X550/I350 等),或改用 SR-IOV 虛擬功能 (VF) 替代傳統 IP 別名。

2. SSL 憑證與 SNI (Server Name Indication)

  • 本方案不依賴 SNI,每個虛擬主機綁定獨立 IP,完美支援舊版瀏覽器(IE 6/XP、Java 6、舊版 Android)。
  • 若 IPv4 資源極度稀缺,現代 Apache (2.2.12+) + OpenSSL (0.9.8f+) 支援 SNI,可在單一 IP:443 透過 Host Header 選擇憑證,但需確認用戶端相容性。

3. 反向代理標頭傳遞

RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-For "%{REMOTE_ADDR}s"
ProxyPreserveHost On

確保後端應用能正確識別原始協定與客戶端 IP。

4. 健康檢查與故障切換

搭配 mod_proxy_hcheck (Apache 2.4.21+) 或外部監控 (Zabbix/Prometheus) 實現後端節點健康檢查,失效自動摘除。

擴展應用場景

  • 多租戶 SSL 托管:ISP 為中小客戶提供低流量 HTTPS 站點,單伺服器承載數十域名。
  • 主站 + 備援站同機切換:生產 IP 與 DR IP 同機熱備,DNS 故障轉移秒級完成。
  • Web Service 端點隔離:不同業務 API 綁定不同 IP,獨立憑證、獨立速率限制、獨立 WAF 規則。
現代替代方案: 容器化部署 (Docker/K8s) + Ingress Controller (NGINX/Traefik) + cert-manager 自動簽發 Let's Encrypt 憑證,已成為新標準。IP 別名方案仍適用於舊版應用無法容器化、需支援非 SNI 客戶端、或無容器編排基礎設施的場景。
Copyright © Windows教程網 All Rights Reserved