reactjs - 使用 nginx 运行动态内容
问题描述
我想使用 nginx 来运行我的 node.js 应用程序。我创建了应用程序的构建,并在我的 nginx.conf 中将根设置为指向构建文件夹的位置。这有效,我的应用程序在 nginx 上成功运行。
现在我想知道是否可以直接通过 nginx 提供动态内容。就像我如何使用 npm start 运行应用程序一样,我可以使用 nginx 做类似的事情而不是使用构建(静态)文件吗?
解决方案
你需要一个反向代理。
在您的应用程序中。将您的服务器配置为在内部端口上运行。例如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 上服务有几个原因。
Nginx 可以比 Express.static 或其他节点静态服务器更快地服务器静态内容。
当您想要扩展服务器时,Nginx 可以充当负载均衡器。
Nginx 已经在互联网上进行了实战测试,因此大多数安全问题已得到修复或众所周知。相比之下, express 或 http.server 只是库,您是负责应用程序安全性的人。
与 node 相比,Nginx 在服务 HTTPS 方面要快一些。因此,您可以在 node 中开发一个普通的 HTTP 服务器,并让 nginx 处理加密。
推荐阅读
- python - 编码新手:尝试使用数据库连接运行烧瓶 Web 应用程序时出现内部服务器错误
- python - Keras Sequential 模型适合 Vectorizer 形状
- c# - 使用 c# 从 CouchDB 获取大的二进制数据
- woocommerce - 将 WooCommerce 运输表格添加到单个产品页面
- python - 如何通过python处理丢失的数据
- python - Numpy 数组索引错误:IndexError:布尔索引与维度 0 上的索引数组不匹配;尺寸为 16
- android - “react-native run-android”给出错误 - 任务':app:mergeDebugResources'的执行失败。我可以运行模拟器,但应用程序无法启动
- angular - core.js:6228 错误错误:未捕获(承诺中):TypeError:无法读取未定义的属性“id”
- javascript - 为csv数据JS动态添加列
- javascript - 使用 Permissions API revoke 重置地理位置权限