哪个最有效:直接通过 nginx 提供静态文件还是通过 nginx 反向代理通过节点提供静态文件?

2024-01-12

我已经使用了nginx as reverse proxy服务我的node.js网络应用程序3000<->80例如。实际上,我在节点应用程序中提供我的资产,使用express.static中间件。

我读了一遍又一遍,发现 nginx 提供静态文件的效率非常高。

问题是,什么是最好的?像我已经做的那样提供资产还是配置 nginx 来直接提供静态文件本身?

或者说几乎是一样的?


最好的方法是使用 nginx 服务器为您提供静态文件,并让您的 Node.js 服务器处理动态内容。

它通常是减少 Node.js 服务器上的请求量的最优化解决方案,该服务器比 nginx 更慢地服务器静态文件,例如:

如果您已经为 Nodejs 应用程序设置了反向代理,那么实现这一点的配置非常简单。

nd nginx 配置可以是

   root /home/myapp;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;

    server_name _;

    location /public/ {
            alias /home/myapp/public/;
    }

    location / {
            proxy_pass http://IPADRESSOFNODEJSSERVER:8080;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            #try_files $uri $uri/ =404;
    }

url 的第一部分带有 /public/ 的每个请求都将由 nginx 处理,并且每个其他请求将被代理到您的 Nodejs 应用程序IPADRESSOFNODEJSSERVER:NODEJSPORT通常是IPADRESSOFNODEJSSERVER是本地主机

Express 的文档部分告诉我们http://expressjs.com/en/advanced/best-practice-performance.html#proxy http://expressjs.com/en/advanced/best-practice-performance.html#proxy

更好的选择是使用反向代理来提供静态文件; 有关详细信息,请参阅使用反向代理。

而且nginx会让你轻松定义缓存规则因此,对于不改变的静态资源,它也可以用一行来加速您的应用程序。

location /public/ {
            expires 10d;
            alias /home/myapp/public/;
        }

您可以在互联网上找到很多比较这两种方法的文章,例如:http://blog.modulus.io/supercharge-your-nodejs-applications-with-nginx http://blog.modulus.io/supercharge-your-nodejs-applications-with-nginx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

哪个最有效:直接通过 nginx 提供静态文件还是通过 nginx 反向代理通过节点提供静态文件? 的相关文章

随机推荐

  • IE 抛出访问被拒绝错误

    我有 2 个项目 相互连接和通信 在 2 个 tomcat 实例上运行 在我的本地 我有 2 个 tomcats 正在运行 在所有不同的浏览器上一切都很好 除了 IE 之外 它说访问被拒绝加载 Javascript 文件 所以我已经包含了一
  • Erlang 列表理解

    我正在测试一个具有两个不等式的表达式来满足列表理解的条件 有没有办法在这里进行赋值而不重复该表达式 下面的代码不起作用 但我希望它能起作用 diagnose Expertise PatientSymptoms gt CertainDisea
  • C++ const public field 与 getter 方法

    我想为某个类的每个对象添加唯一的 ID 在单个会话内 一种解决方案是使用工厂函数来增加一些静态计数器 一个更简单的解决方案是将此计数器添加到类本身 例如 class fooWithUniqueId public fooWithUniqueI
  • std::mutex 的 constexpr 构造函数是如何实现的?

    在查看 C 参考时std mutex https en cppreference com w cpp thread mutex mutex 我注意到构造函数std mutex被标记constexpr 一开始这很令人惊讶 因为我们通常必须进行
  • HTML5 Web SQL 数据库问题

    我的公司目前正在过渡到新的架构以及为移动设备提供服务的模型 我们的应用程序传统上是基于网络的 HTML5 CSS3 JS PHP MYSQL 所以我们希望能够将其移植到移动平台 而不必重新发明轮子 Cordova 以及以独立方式连接到桌面
  • 聚合物获取纸张输入值

    我使用 Polymer 很短一段时间 现在我想获取纸张输入的值 我不知道我该怎么做 这是行不通的 this form password 我想获取该字段的值
  • 当对象(例如位图)成为孤立对象时,如何处理它?

    我有一个 A 类 为其他 B C 类等提供位图 现在 A 类将其位图保存在环形队列中 因此一段时间后它将失去对该位图的引用 当它仍在队列中时 同一个位图可以由多个类检出 这样 B 和 C 都可以保存对此同一个位图的引用 但也可能发生只有其中
  • adobe media server 4 与亚马逊的费用如何?

    有人尝试过在 Amazon Web 服务上使用 Flash Media Server 4 吗 我想知道您的经验是什么以及运行它的成本 This Adobe 文档 http help adobe com en US flashmediaser
  • Android 上的自签名 SSL 接受

    如何在 Android 上接受 Java 自签名证书 代码示例将是完美的 我在互联网上到处查找 虽然有些人声称找到了解决方案 但它要么不起作用 要么没有示例代码来支持它 我在 ExchangeIt 中具有此功能 它通过 WebDav 连接到
  • R 3.6 的 RDCOM 客户端

    我已经从以下位置下载了该软件包https github com omegahat RDCOMClient https github com omegahat RDCOMClient 并按照说明从本地源安装它 如何从下载的 zip 文件安装包
  • Facebook 应用程序请求对话框未发送请求

    我们有一个使用 Facebook 登录的网站 我们有一个邀请页面 显示用户的 Facebook 好友 然后让我们通过 Facebook 邀请他们 invite container a live click function var link
  • 问题:运行 cuckoo.py 时“OSError:/usr/lib/libyara.so:无法打开共享对象文件:没有这样的文件或目录”

    我已经安装了布谷鸟和所有依赖项 并且还使用虚拟框创建了虚拟机 我收到错误 OSError usr lib libyara so cannot open shared object file No such file or directory
  • 如何在 Java 桌面应用程序中使用 Google Drive?

    我正在处理移动和桌面应用程序 我正在尝试使用 Google Drive 作为永久存储文件夹 不幸的是我很茫然 因为我找不到任何例子 有人可以给我举一个从 Google 云端硬盘存储或检索文件的示例吗 我真的很想看到一个简单的代码示例 或者一
  • 如何在 Visual Studio 2012 中分析单元测试?

    是否有可能profileMSTest 单元测试Visual Studio 2012 旗舰版不使用任何外部分析工具 此功能已在即将发布的 Visual Studio 2012 季度更新 1 中重新添加 在测试资源管理器中右键单击要分析的测试
  • 自定义 ASP.NET SqlMembershipProvider - 处理连接字符串

    我正在创建一个自定义 SqlMembershipProvider 类 以向基类添加一些增强功能 不过 我正在忙于处理连接字符串 如何从配置中读取连接字符串名称并使其可供其余方法使用 现在我有 public override void Ini
  • 使用 JavaScript 基于字符串创建十六进制颜色

    我想创建一个函数来接受任何旧字符串 通常是一个单词 并从中somehow生成一个介于之间的十六进制值 000000 and FFFFFF 所以我可以将它用作 HTML 元素的颜色 甚至可能是一个速记的十六进制值 例如 FFF 如果不那么复杂
  • 使用 Mapbox 过滤掉国家/地区

    是否有可能使用 Mapbox 仅显示德国国家边界和内部数据 我不想展示世界其他地方 Thankx Markus 是的 使用德国 GeoJSONhttp code highcharts com mapdata http code highch
  • android usb UsbDeviceConnection.bulkTransfer 返回 -1

    我正在尝试从 Android 平板电脑向 POS 打印机发送命令 我已经能够使基本连接正常工作 但现在当我尝试将数据发送到打印机时 bulkTransfer 返回 1 请帮助我了解发生了什么事 以下是从 android 站点获取的修改后的广
  • 处理不断变化的模式

    我们是一家游戏公司 将事件 每天最多 1 个千兆事件 存储到 bigquery 事件按月份和应用程序进行分片 以降低查询成本 现在来谈谈我们的问题 我们当前的解决方案支持添加新类型的事件 从而产生新版本的表模式 该版本也已添加到表中 I e
  • 哪个最有效:直接通过 nginx 提供静态文件还是通过 nginx 反向代理通过节点提供静态文件?

    我已经使用了nginx as reverse proxy服务我的node js网络应用程序3000 lt gt 80例如 实际上 我在节点应用程序中提供我的资产 使用express static中间件 我读了一遍又一遍 发现 nginx 提