清漆,nginx,& node.js:带有node.js后备的静态nginx html页面

时间:2013-02-28 18:16:56

标签: node.js nginx varnish

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

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

例如,/将由nginx以静态HTML页面的形式发送,而任何不匹配的内容(例如/dynamic_stuff/dynamic_stuff2)将由节点处理。 JS。

在网上的其他帖子中,其他人将node.js完全放在一个单独的目录中,比如/node/dynamic_stuff,但我不想为我的路由设置单独的目录。

现在我已经将/提供给node.js,就像其他所有内容一样,但如果我只是测试我的node.js服务器并将其删除,我希望/能够回退到index.html的nginx版本。在这种情况下,如果我的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,包括/

1 个答案:

答案 0 :(得分:0)

我认为最简单的事情就是将index设置为

index index.html
root /path/to/public

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

现在将此index.html放在节点应用的公共目录中。其余的将从nginx代理到节点实例。

当然,如果你愿意,你可以简单地将其他静态html放在子目录中:

public/about(index.html
public/faq/index.html
...