核心概念速查
| 名詞 | 定位 | 核心職責 | 典型場景 |
| URL 靜態化 | SEO/架構優化手段 | 將動態路徑 (.jsp, .php, .do) 重寫為靜態風格 (.html, 目錄化),利於搜尋引擎爬蟲抓取與快取 | 電商商品頁、文章詳情、論壇帖子 |
| IIS (Internet Information Services) | Windows 原生 Web 伺服器 | HTTP/HTTPS/FTP/SMTP/NNTP 服務,ASP.NET 原生支援,GUI 管理,Windows 整合驗證 | Windows Server 環境、.NET 應用、企業內部門戶 |
| Apache HTTP Server (httpd) | 跨平台 Web 伺服器 (市佔率最高) | 靜態資源極致效能、模組化擴展 (mod_proxy, mod_rewrite, mod_ssl, mod_security)、反向代理、負載均衡 | 高併發靜態資源、PHP (mod_php/php-fpm)、前端代理層 |
| Tomcat (Apache Tomcat) | Servlet/JSP 容器、輕量級應用伺服器 | 執行 Java Web 應用 (Servlet, JSP, EL, WebSocket)、內建 HTTP 連接器、支援 Jakarta EE 子集 | Java Web 專案、Spring Boot 嵌入式、微服務節點 |
URL 靜態化技術實現
Apache mod_rewrite 範例
<IfModule mod_rewrite.c>
RewriteEngine On
# 商品頁:/product/12345.html → /product.jsp?id=12345
RewriteRule ^product/([0-9]+)\.html$ /product.jsp?id=$1 [L,QSA]
# 文章:/article/2024/01/15/seo-title.html → /article.jsp?date=2024-01-15&slug=seo-title
RewriteRule ^article/([0-9]{4})/([0-9]{2})/([0-9]{2})/([^/]+)\.html$ /article.jsp?y=$1&m=$2&d=$3&slug=$4 [L]
</IfModule>
Tomcat 原生支援 (Servlet 3.0+)
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
WEB-INF/urlrewrite.xml:
<rule>
<from>/product/([0-9]+)\.html</from>
<to>/product.jsp?id=$1</to>
</rule>
Spring Boot / Spring MVC 靜態化
- Thymeleaf/FreeMarker 模板預渲染生成靜態 HTML
- Controller 返回
forward:/static/page.html 配合 ResourceHttpRequestHandler
- 現代做法:SSR (Server-Side Rendering) + CDN 快取,或 SSG (Static Site Generation) (Next.js, Nuxt, VitePress)
三大伺服器協作架構演進
架構 1:單一 Tomcat (開發/測試/小流量)
Client → [Tomcat:8080] → Servlet/JSP → DB
- 優點:部署簡單、除錯方便
- 缺點:靜態資源處理效能弱、無負載均衡、單點故障
架構 2:Apache (前端) + Tomcat (後端) — 經典生產架構
Client → [Apache:80/443] --mod_proxy_ajp/mod_jk--> [Tomcat:8009 (AJP) / 8080 (HTTP)]
↳ 靜態資源 (.css, .js, .jpg) 直接由 Apache 服務
↳ 動態請求 (/api/*, *.do, *.jsp) 代理至 Tomcat
連接器選擇
| 協議 | 模組 | 效能 | 穩定性 | 建議 |
| AJP/1.3 | mod_jk / mod_proxy_ajp | 高 (二進制、長連線、連線池) | 成熟、廣泛使用 | 首選 |
| HTTP/1.1 | mod_proxy_http | 中 (文本、需解析) | 簡單、除錯易 | 次選、調試用 |
Apache httpd.conf 關鍵配置
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
# 靜態資源直接服務
Alias /static "D:/webapps/myapp/static"
<Directory "D:/webapps/myapp/static">
Require all granted
ExpiresActive On
ExpiresDefault "access plus 1 year"
</Directory>
# 動態代理至 Tomcat 叢集
<Proxy balancer://tomcat_cluster>
BalancerMember ajp://127.0.0.1:8009 route=tomcat1
BalancerMember ajp://127.0.0.1:8010 route=tomcat2
ProxySet lbmethod=byrequests
</Proxy>
ProxyPass /static/ !
ProxyPass / balancer://tomcat_cluster/ stickysession=JSESSIONID|jsessionid
ProxyPassReverse / balancer://tomcat_cluster/
架構 3:Nginx (前端) + Tomcat 叢集 — 現代高併發首選
Client → [Nginx:80/443] --upstream (HTTP/1.1 或 AJP)--> [Tomcat1:8080, Tomcat2:8080...]
↳ 靜態資源、SSL 終結、Gzip、快取、限流、WAF
↳ 更輕量、事件驅動、C10K+ 連線處理能力
架構 4:IIS (前端) + Tomcat — Windows/.NET 混合環境
- 使用
isapi_redirect.dll (BonCode) 或 Application Request Routing (ARR) 反向代理
- 適用於同一台 Windows Server 同時跑 ASP.NET 與 Java 應用
效能對比與選型建議
| 指標 | Apache | Nginx | IIS | Tomcat (獨立) |
| 靜態檔案吞吐 | 高 | 極高 | 高 | 中低 |
| 併發連線 (C10K) | 中 (Prefork/Worker/Event MPM) | 極高 (Event Loop) | 高 | 中 (執行緒模型) |
| 記憶體佔用 | 中高 | 低 | 中高 | 高 (JVM Heap) |
| 模組生態 | 豐富 | 模組化(第三方較少) | Windows 整合強 | Java 生態 |
| SSL/TLS 效能 | 中 | 高 (BoringSSL/OpenSSL) | 高 (Schannel) | 中 |
Tomcat 獨立模式優化 (無前端代理時)
server.xml:<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="500" acceptCount="1000" compression="on" compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json" />
- 啟用
Http11NioProtocol (非阻塞 I/O) 替代預設 BIO
- 設定
maxHttpHeaderSize, maxPostSize 防惡意大請求
- 靜態資源配置
DefaultServlet:readonly=true, listings=false, fileEncoding=UTF-8
安全性強化清單
- 隱藏伺服器版本:
ServerTokens Prod; ServerSignature Off (Apache) / serverTokens="Prod" (Tomcat)
- 禁用 TRACE/OPTIONS:
TraceEnable Off
- 安全標頭:
X-Frame-Options: DENY; X-Content-Type-Options: nosniff; Content-Security-Policy; Strict-Transport-Security
- 限制上傳大小、請求標頭大小、連線超時
- 定期更新 OpenSSL / Tomcat / Apache / Nginx 修補 CVE
結語
理解 URL 靜態化 是前端架構優化的起點;Apache/Nginx/IIS 擅長靜態資源、SSL、代理、負載均衡;Tomcat 專注 Java 動態業務邏輯。生產環境標準架構為 Nginx/Apache 前端代理 + Tomcat 叢集後端,靜動分離、水平擴展、高可用三位一體。選型原則:Linux 首選 Nginx,Windows 混合環境用 IIS,傳統 Java 體系 Apache 成熟穩健。