首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

URL 靜態化、IIS、Apache、Tomcat 核心差異與協作架構全解析

     編輯:Java 相關知識

核心概念速查

名詞定位核心職責典型場景
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.3mod_jk / mod_proxy_ajp高 (二進制、長連線、連線池)成熟、廣泛使用首選
HTTP/1.1mod_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 應用

效能對比與選型建議

指標ApacheNginxIISTomcat (獨立)
靜態檔案吞吐高極高高中低
併發連線 (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

安全性強化清單

  1. 隱藏伺服器版本:ServerTokens Prod; ServerSignature Off (Apache) / serverTokens="Prod" (Tomcat)
  2. 禁用 TRACE/OPTIONS:TraceEnable Off
  3. 安全標頭:X-Frame-Options: DENY; X-Content-Type-Options: nosniff; Content-Security-Policy; Strict-Transport-Security
  4. 限制上傳大小、請求標頭大小、連線超時
  5. 定期更新 OpenSSL / Tomcat / Apache / Nginx 修補 CVE

結語

理解 URL 靜態化 是前端架構優化的起點;Apache/Nginx/IIS 擅長靜態資源、SSL、代理、負載均衡;Tomcat 專注 Java 動態業務邏輯。生產環境標準架構為 Nginx/Apache 前端代理 + Tomcat 叢集後端,靜動分離、水平擴展、高可用三位一體。選型原則:Linux 首選 Nginx,Windows 混合環境用 IIS,傳統 Java 體系 Apache 成熟穩健。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved