我已经开发Web项目已经有一段时间了。其中一些托管在Tomcat / JBOSS(Java Web应用程序)上,另一些托管在Apache(PHP应用程序)上。
我希望水平扩展我的应用程序并遇到nginx,现在我正在使用nginx作为我的tomcat和apache服务器的反向代理(在LAN内的不同机器上)
到目前为止,我一直使用jsp / php模板渲染网页,即通过这些模板插入菜单栏,页眉和页脚。这些模板是动态的,即,必须根据用户的访问级别插入它们。
用户可以是管理员,也可以是具有不同访问权限的员工,这些权限由应用程序本身管理。特定用户无法访问的页面不应由该用户访问(即使直接输入URL)。现在,我们通过服务器端重定向来处理此问题。
现在的问题是,我希望减轻我的apache / tomcat服务器的负载,而又不影响上述安全性方面。
我想知道是否有一种方法可以通过重新组织我的Project来将我的jsp / php代码与静态内容完全分开,但是在执行此操作时,必须牢记以下几点:
我希望通过我的应用程序来管理文件级访问,即,用户不应通过直接通过URL访问任何静态项目文件来访问该文件。
我希望将nginx用作负载平衡器,并希望其能够快速提供静态内容。
最佳答案
嗯,这需要对工作方式进行重大更改,但是您可以使用服务器端包含。
关于SSI
的信息
wiki
nginx ssi module
varnish esi(清漆esi为`SSIZ)
我添加了清漆,因为它具有大量功能,并且唯一的目的是缓存。我了解到的是,您应该使用专门用于该工具的工具,而不要像强制性那样试图强迫工具使用它。
我还添加了清漆,因为在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块,对其进行修复并将其发送给用户。等等,纯html值得担心。
但随后第二个请求发出(同一天)。
现在只需要检索块a,因为块b仍被缓存。因此,只有一小部分页面需要向服务器请求。
希望本介绍介绍
SSI
的基础知识。tldr;
使用
SSI
,它可以减少到Web服务器的流量,并可以缓存大量静态内容。