0

我在 nginx 前面的 EC2 上运行 varnish,它路由到 node.js。

我想要的是通过 nginx 从某些路由(例如/for index.html)提供特定的静态 HTML 页面,但所有其他路由都由 node.js 处理。

例如,/将由 nginx 以静态 HTML 页面的形式发送,而任何不匹配的内容,例如/dynamic_stuffor /dynamic_stuff2,将由 node.js 处理。

在其他在线线程中,其他人将 node.js 完全放在单独的目录中,/node/dynamic_stuff但我不想为我的路由设置单独的目录。

现在我已经/像其他所有东西一样由 node.js 提供服务,但如果我只是测试我的 node.js 服务器并将其关闭,我想/回退到index.html. 在这种情况下,如果我的 node.js 服务器被关闭,那么我会得到一个 502 Bad Gateway。

我不太担心通过 nginx 与 node.js 提供文件的性能,我只是想如果 node.js 由于某种原因出现故障,我想让 nginx 处理基本页面。

相关脚本:

location = / {
    index index.html
    root /path/to/public
    try_files $uri $uri/ index.html;
}

location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;
    proxy_pass node_js;
}

如果我使用上面的代码,所有请求仍会发送到 node.js,包括/.

4

1 回答 1

0

如果只是 index.html,我认为最简单的方法是将 index 设置为

index index.html
root /path/to/public

现在应该从 nginx 提供公共目录中的所有文件。

现在把这个 index.html 放在你的节点应用程序的公共目录中。其余的将从 nginx 代理到节点实例。

当然,如果需要,您可以简单地将其他静态 html 放在子目录中:

public/about(index.html
public/faq/index.html
...
于 2013-02-28T21:26:35.797 回答