2014-02-28 18 views
2

我一直在开发web项目很长一段时间了。其中一些托管在Tomcat/JBOSS(Java webapps)上,一些托管在Apache(PHP应用程序)上。如何最好地组织我的项目以获得最佳的nginx使用率

我想横向扩展我的应用程序和遇到的nginx和现在我使用nginx的,作为我的Tomcat和Apache服务器的反向代理(在局域网内不同机器)

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

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

现在,问题是,我希望减少我的apache/tomcat服务器上的负载,而不会影响上述安全方面。 我想知道是否有办法完全从静态内容通过分离出我的JSP/PHP代码重新整理我的项目,但在这样做有以下几点要牢记,

  • 我希望通过我的应用程序来管理文件级访问,即用户不应该通过URL直接访问任何静态项目文件。
  • 我希望使用nginx作为负载平衡器,并且因为它能够快速传递静态内容。

回答

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瞧,简单的html注意到担心。

但是第二个请求命中(当天)。

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

希望本文介绍SSI的基础知识。

tldr;

使用SSI,它可能会导致更少的流量到网络服务器,并会缓存很多静态内容。

相关问题