2016-05-15 66 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');