如何最好地组织我的项目以获得最佳nginx使用率

时间:2014-02-28 05:56:21

标签: java php jsp tomcat nginx

我已经开发了很长一段时间的Web项目。其中一些托管在Tomcat / JBOSS(Java webapps)上,一些托管在Apache(PHP应用程序)上。

我希望横向扩展我的应用程序并遇到nginx,现在我使用nginx作为我的tomcat和apache服务器的反向代理(在局域网内的不同机器上)

到目前为止,我一直使用jsp / php模板渲染网页,即通过这些模板插入菜单栏,页眉,页脚。这些模板是动态的,即必须根据用户的访问级别插入它们。

用户可以是管理员,也可以是具有不同访问权限的员工,由应用程序本身管理。他不应该访问特定用户无法访问的页面(即使直接输入URL)。现在,我们通过服务器端重定向来处理这个问题。

现在,问题是,我希望减少我的apache / tomcat服务器上的负载,而不会影响上面提到的安全方面。 我想知道是否有办法通过重新组织我的项目来完全从静态内容中分离出我的jsp / php代码,但在执行此操作时,必须牢记以下几点,

  • 我希望通过我的应用程序管理文件级访问,即用户不能通过URL直接访问任何静态项目文件来访问它。
  • 我希望将nginx用作负载均衡器,以及快速提供静态内容的优势。

1 个答案:

答案 0 :(得分:1)

那么它需要对如何工作进行重大改变,但你可以使用服务器端包含。

有关SSI

的信息

我添加了清漆,因为它具有大量功能,其唯一目的是缓存。而我所学到的是你应该使用一个工具来制作它,而不是试图强迫一个工具使用它,就像它不是。 我还添加了清漆,因为我们在使用Zend Framework 2的nginx ssi时遇到了问题,而清漆则没有。

现在你想到了一些不错的信息,但是SSI是什么。

像我说的那样SSI代表服务器端包含。大致转换为,您将html拆分为多个HTML文件,这些文件可以单独缓存。

例如,你可以使用以下HTML(不是为了赢得选美比赛,所以这是一个例子)。

<div>Current username</div> /* block a */
<div>General menu</div> /* block b */

你对SSI所做的是将html分成块(就像HTML:P一样)。

阻止a,是我们不想缓存的当前时间戳(<?= time(); ?>),所以我们对SSI说,不要缓存块a,或者1秒钟。

块b,是一般菜单(没有ACL,所以每个人都一样)。第一次包含bock时,SSI会请求获取该块的HTML。我们对SSI处理程序(nginx / varnish / etc)说,您可以将此部分保存1天。

现在,SSI处理程序包含所有HTML块,修复它们并将它们发送给用户。 Et voila,简单的html,注意到担心。

然后第二个请求命中(同一天)。

现在只有块a必须被检索,因为块b仍然被缓存。因此,只有一小部分页面必须向服务器请求。

希望此简介介绍SSI的基础知识。

tldr;

使用SSI,可能会减少网络服务器的流量,并会缓存大量静态内容。