首页 > 解决方案 > 使用 nginx 运行动态内容

问题描述

我想使用 nginx 来运行我的 node.js 应用程序。我创建了应用程序的构建,并在我的 nginx.conf 中将根设置为指向构建文件夹的位置。这有效,我的应用程序在 nginx 上成功运行。

现在我想知道是否可以直接通过 nginx 提供动态内容。就像我如何使用 npm start 运行应用程序一样,我可以使用 nginx 做类似的事情而不是使用构建(静态)文件吗?

标签: reactjsnginx

解决方案


你需要一个反向代理。

在您的应用程序中。将您的服务器配置为在内部端口上运行。例如3000.

然后将 nginx 配置为代理到您的应用程序的连接。这是一个简单的 nginx 配置来做到这一点:

root /path/to/app/build;

# Handle static content
location  ^~ /static {
    try_files $uri $uri/ =404;
}

# Handle dynamic content
location / {
    proxy_pass http://127.0.0.1:3000;
}

或者,如果您愿意,可以将 URL 方案反转为默认为静态文件:

root /path/to/app/build;

# Handle dynamic content
location ^~ /api {
    proxy_pass http://127.0.0.1:3000;
}

# Handle static content
location / {
    try_files $uri $uri/ =404;
}

为什么要做这样的事情?

使用 nginx 前端而不是将服务器设置为直接在端口 80 上服务有几个原因。

  1. Nginx 可以比 Express.static 或其他节点静态服务器更快地服务器静态内容。

  2. 当您想要扩展服务器时,Nginx 可以充当负载均衡器。

  3. Nginx 已经在互联网上进行了实战测试,因此大多数安全问题已得到修复或众所周知。相比之下, express 或 http.server 只是库,是负责应用程序安全性的人。

  4. 与 node 相比,Nginx 在服务 HTTPS 方面要快一些。因此,您可以在 node 中开发一个普通的 HTTP 服务器,并让 nginx 处理加密。


推荐阅读