2016-05-15 62 views
1

通过TwitterNginx和Node.js - 我做错了吗?

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

—布赖恩·休斯一时间,现在,我一直在使用Node.js进行应用程序,正如Mr.Hughes建议的那样,使用Nginx作为反向代理服务它们。但我不知道我是否正确地做了,因为我仍然可以通过互联网访问我的Node.js应用程序,而无需通过Nginx服务器


在其核心,典型的应用程序非常简单。它是配有ExpressJS这样的:

var express = require("express"); 

var app = express(); 

// ... 

app.listen(3000); 

和Nginx的配置为反向代理,像这样:

# ... 

location/{ 
    proxy_pass http://127.0.0.1:3000; 
} 

# ... 

而这种奇妙的作品!但是我注意到一个我不确定的行为是可取的,并且可能会打败使用Nginx作为反向代理的大部分目的:

假设example.org是一个域名,指向我的服务器,我可以导航到http://www.example.org:3000并从任何地方与我的应用程序进行交互,而无需触摸Nginx服务器。

典型的最终用户永远不会有任何理由导航到http://<whatever-the-server-host-name-or-IP-may-be>:<the-port-the-application-is-being-served-on>,所以这不会影响他们。不过,我担心的是,这可能会导致一个非最终用户可以利用的安全隐患。


  1. 如果该应用程序可以直接访问,即使正在使用的Nginx作为反向代理?

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

+0

看来,你的服务器是建立在这样一种方式,它允许任何端口,这不应该是可能的连接。我的意思是我的服务器上有nginx和端口4001到4005上的一些应用程序的ubuntu 14.04,我无法通过myserver.com:4001等访问它们,而且我没有做任何事情来阻止它。我不是专家,但我认为你应该使用一些防火墙来防止连接到任何你不想暴露的端口。我读过的地方默认情况下(在Ubuntu上)只能从外部访问1023端口。端口1024到65535应该不可访问。 – Molda

回答

4
  1. 这是最好不要直接使用(恕我直言)

  2. 您可以指定接受hostname

    app.listen(3000, 'localhost');