把「名詞」與「角色」拆開,就不會混在一起。
1. 最常被混淆的三層
角色:「Web 伺服器 / Web Server」
Nginx | 專門「收 HTTP 請求、回靜態檔」 |
Apache httpd | 也可當反向代理/負載平衡器 |
IIS | Windows 上的同類產品 |
角色:「應用伺服器 / Application Server」
Tomcat | 跑 Java Servlet/JSP、WebSocket |
Django (WSGI) | 跑 Python Web App (需搭配 WSGI container) |
Node.js | 本身即可跑 HTTP Server,也可只當語言執行環境 |
角色:「整合包 / 套裝環境」
XAMPP | Apache + MariaDB + PHP + Perl 的懶人包 |
2. 誰來運行誰?
- 絕對不會說「XAMPP 是 Tomcat 的容器」。
XAMPP 裡面其實已包含 Apache (Web 伺服器) 與 MariaDB,「沒有」Tomcat;
如果還想跑 Java,需要額外安裝 Tomcat,讓它和 XAMPP 一起運作。 - 常見組合關係
(1) Nginx → 反向代理 → Tomcat
(2) Nginx → 反向代理 → uWSGI→ Django
(3) Nginx → 反向代理 → Node.js (cluster)
在這裡,Nginx 扮演「Web 伺服器/反向代理」,Tomcat / uWSGI / Node 扮演「應用伺服器」。
3. 專有名詞快速對照
名詞 | 真正指什麼 |
---|---|
Web Server | 專指 Nginx、Apache httpd、IIS、caddy 這類「收 HTTP、吐靜態檔或轉包」的軟體。 |
Application Server | 專指「執行開發程式」的容器:Tomcat、Jetty、uWSGI、Gunicorn、Django-dev-server、Node.js 本身。 |
XAMPP / LAMP | 只是「套裝懶人包」,裡面已經打包 Web Server、DB、語言直譯器。 |
Django | 嚴格說是一個「Web 框架」,需要額外的 WSGI Server(uWSGI、Gunicorn)或 runserver 才能對外服務。 |
Node.js | 既是「JavaScript 執行環境」,也內建 http 模組可直接當 Web Server,所以常被簡稱「Node Server」。 |
4. 總結
Nginx / Apache / IIS 是「Web 伺服器」,
Tomcat / Django / Node.js 是「應用伺服器或執行環境」,
XAMPP 只是「懶人整合包」。
它們之間常見「反向代理」關係,而不是「容器」關係。