Nginx和Node.js - 我做错了吗?

时间:2016-05-15 19:19:18

标签: node.js nginx reverse-proxy

  

“如果#nginx没有坐在您的节点服务器前面,那么您可能做错了。”

     

- Bryan Hughes通过Twitter

现在,我一直在用Node.js创建应用程序,正如Mr.Hughes建议的那样,使用Nginx作为反向代理服务它们。但我不确定我是否正确执行因为我仍然可以通过互联网访问我的Node.js应用程序而无需通过Nginx服务器

其核心是典型的应用程序非常简单。它与ExpressJS一起提供如下:

( | V1 - V2 | / ((V1 + V2)/2) ) * 100 

= ( | 7606 - 6000 | / ((7606 + 6000)/2) ) * 100 
= ( | 1606 | / (13606/2) ) * 100 
= ( 1606 / 6803 ) * 100 
= 0.236072 * 100 

和Nginx配置为反向代理,如下所示:

var express = require("express");

var app = express();

// ...

app.listen(3000);

这非常有效!但是我注意到一种我不确定是可取的行为,并且可能首先打破了使用Nginx作为反向代理的大部分目的:

假设example.org是指向我的服务器的域名,我可以导航到# ... location / { proxy_pass http://127.0.0.1:3000; } # ... 并从任何地方与我的应用程序交互,而无需触及Nginx服务器。

典型的最终用户永远不会有任何理由导航到http://www.example.org:3000,因此这永远不会影响他们。不过,我担心的是,这可能会对非最终用户可能利用的安全性产生影响。

  1. 即使Nginx被用作反向代理,应该是否可以直接访问应用程序?

  2. 如何配置应用程序以使其仅可用于本地计算机/网络/ Nginx服务器?

1 个答案:

答案 0 :(得分:4)

  1. 最好不要直接使用(imho)。

  2. 您可以指定已接受的hostname

    app.listen(3000, 'localhost');