【问题标题】:How best to organize my Project for optimal nginx usage如何最好地组织我的项目以优化 nginx 使用
【发布时间】:2014-02-28 05:56:21
【问题描述】:

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

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

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

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

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

  • 我希望通过我的应用程序管理文件级别的访问,即,用户不应该通过 URL 直接访问任何静态项目文件。
  • 我希望将 nginx 用作负载均衡器,因为它具有快速交付静态内容的优势。

【问题讨论】:

    标签: java php jsp tomcat nginx


    【解决方案1】:

    好吧,它需要对工作方式进行重大更改,但您可以使用服务器端包含。

    关于SSI的信息

    我添加了 varnish,因为它有很多功能,而且唯一的目的是缓存。我学到的是你应该使用一个工具,而不是试图强迫一个工具使用它,就像它不应该那样。 我还添加了 varnish,因为我们在 Zend Framework 2 中使用 nginx 的 ssi 时遇到了问题,而 varnish 没有。

    现在您认为一些不错的信息,但 SSI 是什么。

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

    你可以有例如下面的 HTML(不是想赢得选美比赛,所以以ment为例)。

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

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

    块 a,是当前时间戳 (&lt;?= time(); ?&gt;),我们不想缓存它,所以我们对 SSI 说,不要缓存块 a,或者 1 秒。

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

    现在 SSI 处理程序拥有所有 HTML 块,修复它们并将它们发送给用户。瞧,纯 html 值得注意。

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

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

    希望这篇介绍能够解释SSI 的基础知识。

    tldr;

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

    【讨论】:

      猜你喜欢
      • 2013-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-12
      • 1970-01-01
      • 1970-01-01
      • 2016-12-20
      • 1970-01-01
      相关资源
      最近更新 更多