Apache-2.2

是否有任何理由使用 Apache 作為我的使用者和 Glassfish 之間的代理?

  • May 12, 2014

我已經看到很多關於使用 Apache 作為 Glassfish(和其他 Java 應用程序伺服器)的代理(mod_proxy 或 mod_jk)的最佳方式的討論,但我還沒有看到任何人真正解釋原因。

我現在的設置是執行 Ubuntu Server 的單個 VPS,Glassfish 在埠 8080 上接受 HTTP 請求(iptables 將埠 80 請求轉發到埠 8080,因此我不必以 root 身份執行 Glassfish)。我經營一些小型網站。

我的網站分為兩個主要部分:靜態和動態。它們都位於一個單獨的子域中。使用 Apache(或其他 Web 伺服器)處理靜態內容很容易,然後使用 Apache 作為動態內容的代理,但有什麼理由這樣做嗎?

如果我要使用 Apache,理想情況下它必須在不到 100 MB 的記憶體中執行,以便為其他所有執行節省空間。

使用最新的應用程序伺服器 (Glassfish 3),我是否會通過使用 Apache 作為代理獲得任何性能優勢?

Glassfish 在提供靜態內容方面有多好?基於名稱的虛擬主機?重定向?我敢打賭,Apache 在這方面做得更好。但是,如果您對占用空間小的前端網路伺服器特別感興趣,請查看 nginx 而不是 Apache。

考慮在 Java 應用程序伺服器前使用反向代理的原因有很多:

  • 在 Linux 上,您不應該以 root 身份執行 GlassFish,但除非您是 root,否則您不能使用埠 80 或 443。反向代理是解決此問題的一種方法。其他解決方法包括 xinetd 和 iptables。或者,您可以不使用標準 Web 埠(對使用者或 SEO 不友好)。
  • 如果您已經有一個現有的 Web 伺服器蹲在您想要的埠上,您可以通過反向代理“共享”它。例如,將 PHP 應用程序和 Java 應用程序都放在同一 Web 伺服器的 80 埠上。
  • Apache 經過更好的測試(使用很多)並且比 GlassFish(使用不多)更安全,因此它可以保護它不被直接訪問。例如,安全專家 (SANS) 建議使用三層架構,其中前端 Web 伺服器位於 DMZ 中,應用程序伺服器位於中間安全級別(數據庫位於第三個甚至更安全的網路中)。
  • 您可以在使用者不知情的情況下更改應用程序伺服器(例如,重命名或將其從一個拆分為多個)。
  • 靜態內容可能具有更好的性能(可以使用本機作業系統文件訪問——但如果您告訴 GlassFish 可以在記憶體中記憶體靜態內容,因此這可以忽略不計)
  • 更熟悉的 URL 重寫、重定向、自定義標頭、記憶體、虛擬主機(注意:GlassFish 可以完成所有這些事情,或者可以使用自定義 Servlet 過濾器或第三方 Servlet 過濾器(如 Tuckey URLRewrite)來完成這些事情)。

引用自:https://serverfault.com/questions/293526