gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:21:47 25 4
gpt4 key购买 nike

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

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

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

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

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

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

最佳答案

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

关于SSI的信息

我添加了 varnish,因为它有很多功能,而且它的唯一目的是缓存。我学到的是,您应该使用适合其用途的工具,而不是试图强制工具像它不应该那样使用它。我还添加了 varnish,因为我们在将 nginx 的 ssi 与 Zend Framework 2 结合使用时遇到了问题,而 varnish 则没有。

现在您想到了一些不错的信息,但是 SSI 是什么? .

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

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

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

你用 SSI 做什么将 html 分成 block (就像 HTML :P 一样)。

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

b block ,是一个通用的菜单(没有ACL,所以大家都一样)。 block 第一次包含在SSI请求获取 HTML对于 block 。我们对 SSI 说handler (nginx/varnish/etc) 你可以将这部分保存 1 天。

现在 SSI 处理程序拥有所有 HTML block ,修复它们并将它们发送给用户。 Et voila,需要担心的纯 html。

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

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

希望这个介绍解释了 SSI 的基础知识.

长话短说;

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

关于java - 如何最好地组织我的项目以获得最佳的 nginx 使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22087394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com