網頁伺服器負責把內容送出去,但登入驗證、購物車計算、訂單成立這些「會動」的邏輯,是由應用程式伺服器執行的。它是網站與企業系統真正的引擎,卻也是最常和網頁伺服器混為一談的名詞。這篇文章說明應用程式伺服器是什麼、和網頁伺服器差在哪、一次請求怎麼在三層架構中流動、各語言生態常見的軟體,以及什麼規模的網站才需要獨立的應用程式伺服器。本文屬於《伺服器系列》,總覽見〈伺服器是什麼〉。
一、應用程式伺服器是什麼?
應用程式伺服器(Application Server,常簡稱 AP Server)是執行後端程式、處理商業邏輯並與資料庫溝通的伺服器軟體,把處理結果交給網頁伺服器或直接以 API 回應客戶端。登入時比對帳號密碼、結帳時計算折扣與庫存、送出表單時驗證欄位並寄信,都是它在做的事。
它的另一個角色是「執行環境」:Java 程式需要 Tomcat 這類容器才能對外提供服務,Python 網站需要 Gunicorn 或 Uvicorn 常駐執行,PHP 則由 PHP-FPM 管理一群常駐的處理程序。這些軟體統稱應用程式伺服器,雖然名字與形態不同,位置都一樣:在網頁伺服器後面、資料庫前面。
二、和網頁伺服器差在哪?
網頁伺服器管「收與送」,應用程式伺服器管「算」。兩者常裝在同一台機器,甚至同一個程式能同時扮演兩種角色,所以容易混淆,但職責可以分得很清楚:
| 項目 | 網頁伺服器 | 應用程式伺服器 |
|---|---|---|
| 主要工作 | 接收 HTTP 請求、送出靜態檔案、加密、轉址、日誌 | 執行程式邏輯、存取資料庫、產生動態內容或 API 回應 |
| 處理的內容 | HTML 檔、圖片、CSS、JavaScript 等現成檔案 | 每次請求都可能不同的結果 |
| 代表軟體 | Apache、Nginx、IIS | Tomcat、WildFly、PHP-FPM、Gunicorn、Node.js、Kestrel |
| 效能瓶頸 | 連線數、頻寬、磁碟讀取 | CPU 運算、記憶體、資料庫等待時間 |
| 擴充方式 | 加快取、加 CDN | 多開處理程序、多台機器加負載平衡 |
網頁伺服器本身的運作、常見軟體與對 SEO 的影響,見〈網頁伺服器是什麼〉,本文不重複。
三、一次請求的流程:三層式架構
網頁伺服器、應用程式伺服器、資料庫伺服器合稱三層式架構(Three-tier Architecture),一次動態請求會依序經過三層再原路返回。以「使用者送出詢價表單」為例:
- 網頁伺服器接收收到 POST 請求,判斷這不是靜態檔案,透過 FastCGI、反向代理或連接器轉交應用程式伺服器。
- 應用程式伺服器處理檢查欄位是否完整、驗證碼是否正確、是否為機器人;通過後組成一筆資料。
- 資料庫寫入應用程式伺服器連到資料庫伺服器寫入詢價紀錄,並取回流水號。
- 附帶動作透過郵件伺服器寄出通知信,必要時呼叫外部 API(例如 LINE 通知)。
- 回應產生「已收到您的詢價」頁面或 JSON,交回網頁伺服器送給瀏覽器。
把三層分開的好處是各層可以獨立擴充與更換:流量大時多開幾個應用程式伺服器的處理程序,資料量大時升級資料庫主機,網頁伺服器前面再加 CDN,彼此不互相牽制。
四、應用程式伺服器的主要功能
- 執行商業邏輯:驗證、計算、流程控制,也就是程式碼真正在做的事。
- 管理連線與併發:維持一群常駐的處理程序或執行緒,同時服務多個請求,並在請求間重用資料庫連線(連線池)。
- 會話管理:記住「這位訪客已經登入」,把狀態保存在記憶體、資料庫或 Redis 這類快取中。
- 提供 API:讓網頁前端、手機 App 或其他系統以 REST 或 GraphQL 取用資料。
- 安全與授權:身分驗證、權限檢查、輸入驗證,防止 SQL 注入與跨站腳本等攻擊。
- 交易與排程:確保多步驟操作要全部成功或全部取消,並執行定時工作(每日報表、寄送提醒)。
五、各語言生態的常見軟體
「應用程式伺服器」在 Java 世界是一類明確的產品;在其他語言則是各自的常駐執行器,名稱不同、角色相同。
| 語言生態 | 常見軟體 | 說明 |
|---|---|---|
| Java | Apache Tomcat、Jetty、WildFly(原 JBoss)、Payara(原 GlassFish)、IBM WebSphere、Oracle WebLogic | Tomcat 與 Jetty 是輕量容器;WildFly 以後是完整的 Jakarta EE 應用程式伺服器,金融與政府系統常見。JSP 與 Servlet 就跑在這裡,見〈JSP 是什麼〉。 |
| PHP | PHP-FPM | 常駐的 PHP 處理程序管理器,由 Nginx 或 Apache 透過 FastCGI 呼叫,是現代 PHP 主機的標準架構;語言介紹見〈PHP 是什麼〉。 |
| Python | Gunicorn、uWSGI(WSGI)、Uvicorn(ASGI) | 執行 Django、Flask、FastAPI 應用,前面通常放 Nginx。 |
| .NET | Kestrel、IIS | ASP.NET Core 內建 Kestrel;舊版 ASP.NET 由 IIS 同時擔任網頁與應用程式伺服器。 |
| JavaScript | Node.js(Express、Fastify、Next.js 伺服器) | Node.js 本身就是應用程式伺服器,前面加 Nginx 處理靜態檔案與 HTTPS。 |
| Ruby | Puma、Unicorn | 執行 Ruby on Rails 應用。 |
六、什麼時候需要獨立的應用程式伺服器?
官網與中小型網站通常不需要「另一台」應用程式伺服器,它已經以 PHP-FPM 這類形式包在主機方案裡;需要獨立部署的是流量大、邏輯重或要對外提供 API 的系統。從網頁設計公司的角度,我們用三個訊號判斷:
- 語言環境:Java、Python、Node.js 的網站一定要有自己的應用程式伺服器程序,共享虛擬主機多半不提供,要用 VPS 或雲端主機;PHP 網站則任何主機都能跑。
- 流量與運算:活動期間同時上線人數暴增、或每個請求都要做複雜計算(報價引擎、推薦系統)時,把應用層獨立出來才能單獨擴充。
- 多個前端共用後端:網站、App、合作夥伴系統都要取同一批資料,應用程式伺服器以 API 形式獨立存在最合理。
本站(newscan.com.tw)是 PHP 網站,應用層由 PHP-FPM 承擔,沒有獨立的應用程式伺服器機器,這對以官網與詢問單為目標的網站已經足夠。整體技術架構怎麼選,見〈網頁程式設計是什麼〉;主機方案的選擇見〈虛擬主機是什麼〉。
七、結論
應用程式伺服器是三層架構中負責「算」的那一層:執行程式邏輯、管理連線與會話、存取資料庫、提供 API。在 Java 世界它是一類產品,在其他語言則是各自的常駐執行器。網站主不必自己選型,但要知道自己的網站用哪種語言、應用層跑在哪裡,這決定了能租哪種主機、遇到效能問題時該擴充哪一層。
延伸閱讀:ASP.NET 是什麼
八、常見問答 FAQ
應用程式伺服器是什麼?
應用程式伺服器和網頁伺服器有什麼不同?
什麼是三層式架構?
Tomcat 是什麼?
一般公司網站需要獨立的應用程式伺服器嗎?
參考來源
- Apache Software Foundation,〈Apache Tomcat Documentation〉,Apache 官方文件。
- PHP Group,〈FastCGI Process Manager (FPM)〉,PHP 官方文件。
- Microsoft Learn,〈ASP.NET Core 中的 Kestrel 網頁伺服器〉,Microsoft 官方文件。
- IBM,〈Three-Tier Architecture〉,IBM 官方說明。
- 新視野網頁設計,〈網頁伺服器是什麼?運作原理、Apache 與 Nginx 差別及對 SEO 的影響〉,本站自有內容。
各語言常駐執行器的名稱與定位依撰寫時查閱的官方文件整理;第六節為本站替客戶規劃架構時的實務判斷,不涉及特定客戶資料。