同一台伺服器同時運行 IIS 與 Apache,最穩健的架構是多 IP 綁定:各自佔用獨立 IP 的 80/443 連接埠,避免連接埠衝突與 Socket 重疊。本文詳細說明 IIS 5/6/7+ 及 Apache 的綁定配置步驟,含 httpcfg、adsutil.vbs、Listen 指令實戰參數。
192.168.1.10192.168.1.20cd C:\Inetpub\Adminscripts
cscript adsutil.vbs set w3svc/DisableSocketPooling TRUE
# 回顯:DisableSocketPooling : (BOOLEAN) True
iisreset
停用 Socket Pooling 後,IIS 只會監聽在「網站內容 → 網站標籤 → IP 位址」明確指定的 IP,而非 0.0.0.0 (所有 IP)。
SUPPORT\TOOLS\SUPPORT.CAB 解壓 httpcfg.exe 至 C:\Windows\System32\。httpcfg set iplisten -i 192.168.1.10httpcfg query iplistenhttpcfg delete iplisten -i 192.168.1.10net stop iisadmin /y && net start w3svc圖形介面:IIS 管理員 → 網站 → 繫結 → 編輯 → IP 位址選擇具體 IP (而非「所有未指派」)。
命令列 (appcmd):
appcmd set site "Default Web Site" /bindings:[protocol='http',bindingInformation='192.168.1.10:80:']
appcmd set site "Default Web Site" /bindings:[protocol='https',bindingInformation='192.168.1.10:443:' sslFlags='Sni']
# 僅監聽指定 IP
Listen 192.168.1.20:80
Listen 192.168.1.20:443
# 虛擬主機綁定對應 IP
<VirtualHost 192.168.1.20:80>
ServerName apache.example.com
DocumentRoot "/var/www/html"
</VirtualHost>
<VirtualHost 192.168.1.20:443>
ServerName apache.example.com
SSLEngine on
SSLCertificateFile "/etc/httpd/ssl/apache.crt"
SSLCertificateKeyFile "/etc/httpd/ssl/apache.key"
</VirtualHost>
# 建議批次檔 startup_services.bat
net stop Apache2
net stop iisadmin /y
timeout /t 3
net start Apache2
net start w3svc
先停雙方 → 確保連接埠釋放 → 先啟 Apache (綁定具體 IP) → 再啟 IIS (已透過 httpcfg/繫結限制 IP)。
| 指令 | 用途 | 預期結果 |
|---|---|---|
netstat -ano \| findstr :80 | 檢視連接埠佔用 PID | PID 對應 httpd.exe 與 w3wp.exe,IP 分別為 .10 與 .20 |
curl -I https://192.168.1.10 | 測試 IIS 回應 | HTTP/1.1 200 OK / Server: Microsoft-IIS |
curl -I https://192.168.1.20 | 測試 Apache 回應 | HTTP/1.1 200 OK / Server: Apache |
telnet 192.168.1.10 80 | 手工驗證 TCP 連線 | 連線成功,發送 GET / HTTP/1.0 得回應 |
ARR (Application Request Routing) 依 Host Header 轉發至 Apache (內網 127.0.0.1:8080)。# docker-compose.yml 片段
services:
iis:
image: mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2022
ports: ["192.168.1.10:80:80", "192.168.1.10:443:443"]
apache:
image: httpd:2.4
ports: ["192.168.1.20:80:80", "192.168.1.20:443:443"]
容器化天然隔離網路命名空間,無需調整主機 Socket 設定,強烈建議新專案採用容器編排 (Kubernetes/Swarm/Nomad) 取代裸金屬共存部署。