2013-02-28 75 views
0

我在nginx的前面路线Node.js的这运行在EC2上光油清漆,nginx的,Node.js的:nginx的静态HTML页面与node.js的后备

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

作为一个例子,/将由nginx的在静态HTML页面的形式发送的,而任何不匹配,说/dynamic_stuff/dynamic_stuff2,将由node.js中被处理

在其他线程在线,其他人把node.js放在一个单独的dir中,就像/node/dynamic_stuff一样,但是我不想为我的路由指定一个单独的dir。

现在我有/担任了由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的,包括/

回答

0

我想,如果这是最简单的事情做只是index.html的是指数设定为

index index.html 
root /path/to/public 

所有文件在您的公共目录现在应该从Nginx的服务。

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

当然你也可以简单地把其他静态html子目录中,如果你想:

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

如果我这样做,它仍然向前'/'到Node.js的以下是我的conf中的相关部分: location =/{ index index.html root/path/to/public try_files $ uri $ uri/index.html; } 位置/ { proxy_set_header X-实时IP $ REMOTE_ADDR; proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for; proxy_set_header主机$ http_host; proxy_set_header X-NginX-Proxy true; proxy_pass http:// node_js /; } – Xeus 2013-03-01 18:16:03

+0

这有点难以阅读。也许你可以将你的配置作为代码片段放到你的问题中。 – topek 2013-03-01 18:57:48

+0

好的,完成了,谢谢! – Xeus 2013-03-01 19:45:24