我在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,包括/
。
答案 0 :(得分:0)
我认为最简单的事情就是将index设置为
index index.html
root /path/to/public
现在应该从nginx提供公共目录中的所有文件。
现在将此index.html放在节点应用的公共目录中。其余的将从nginx代理到节点实例。
当然,如果你愿意,你可以简单地将其他静态html放在子目录中:
public/about(index.html
public/faq/index.html
...