有没有任何理由使用Apache作为我的用户和Glassfish之间的代理?

我已经看到很多讨论关于使用Apache作为代理(mod_proxy或mod_jk)和Glassfish(以及其他Java应用服务器)的最佳方式的讨论,但是我还没有看到有人真正解释过为什么。

我现在的安装是一个运行Ubuntu Server的VPS,Glassfish在端口8080上接受HTTP请求(iptables将端口80请求转发到端口8080,因此我不必以root身份运行Glassfish)。 我运行了几个小网站。

我的网站分为两个主要部分:静态和dynamic。 他们每个都在一个单独的子域。 使用Apache(或其他Web服务器)处理静态内容会很容易,然后使用Apache作为dynamic内容的代理,但有没有这样做的理由?

如果我使用Apache,理想的情况是运行内存less于100MB,以节省其他运行的空间。

使用最新的应用程序服务器(Glassfish 3),通过使用Apache作为代理,我可以获得任何性能优势吗?

Glassfish在提供静态内容方面有多好? 基于名称的虚拟? redirect? 我敢打赌,阿帕奇是最好的一切。 如果你对一个小脚本的前端web服务器特别感兴趣,可以看看nginx而不是Apache。

有很多原因可以考虑在Java应用服务器之前使用反向代理:

  • 在Linux上,您不应该以root身份运行GlassFish,但除非您是root用户,否则不能使用端口80或443。 反向代理是解决这个问题的方法之一。 其他的方法包括xinetd和iptables。 或者,你可以不使用标准的networking端口(不是用户或SEO友好)。
  • 如果您已经有一个现有的Web服务器蹲在您想要的端口上,您可以通过反向代理“共享”它。 例如,将PHP应用程序和Java应用程序放在同一个Web服务器的端口80上。
  • Apache比GlassFish更好地testing(使用了很多)并且更安全(没有太多使用),所以它可以保护它免受直接访问。 例如,安全专家(SANS)build议使用三层体系结构,其中前台Web服务器位于DMZ中,应用程序服务器处于中等安全级别(数据库位于第三个甚至更安全的networking中)。
  • 您可以对应用程序服务器进行更改,而无需用户注意(例如,将其重命名或将其从一个分割为多个)。
  • 使用静态内容可能会有更好的性能(可以使用本地操作系统文件访问 – 但是如果您告诉它,则GlassFish可以将静态内容caching到内存中,这样可以忽略不计)
  • 更熟悉的URL重写,redirect,自定义标头,caching,虚拟主机(注意:GlassFish可以完成所有这些工作,或者可以通过自定义的Servletfilter或第三方Servletfilter(如Tuckey URLRewrite)执行这些操作)。