2016-07-21 108 views
0

我已經創建了一個節點js服務器,我無法從網絡外部訪問它。無法從外部網絡訪問nodejs服務器

var express = require('express'); 
    var nodeapp = express(); 

var http = require('http'); 
var server = http.createServer(handleRequest); 
function handleRequest(request, response){ 
     console.log("Got some request" + request); 
     response.end("Response" + request.url); 
} 


server.listen(8086, "0.0.0.0", function() { 
     console.log("http server on "); 
}); 
sudo iptables -L 
Chain INPUT (policy ACCEPT) 
target  prot opt source    destination   

Chain FORWARD (policy ACCEPT) 
target  prot opt source    destination   

Chain OUTPUT (policy ACCEPT) 
target  prot opt source    destination 

我的iptables不顯示任何東西。不過,我有一個端口8080上的tomcat服務器,我可以訪問它。

+0

什麼是操作系統?聽起來像一個centos/selinux問題 – rambossa

+0

@ Michael-R RedHat – user1692342

+0

您是否嘗試使用'semanage'來允許訪問端口。 80和8080是通常已經打開的端口 – rambossa

回答

1

如果您使用的是RedHat的基本安裝,那麼您很可能已啓用SELinux

關於SELinux的長篇短小故事,它與這個問題有關,您可以打開和關閉http訪問端口。操作像iptables這樣的東西是沒有必要的。標準端口(如80和8080)通常在初始設置中已打開。

https://wiki.centos.org/HowTos/SELinux

參見5.4節

我們可能需要一個服務例如Apache被允許綁定和偵聽用於非標準端口上的傳入連接。默認情況下,SELinux策略將只允許服務訪問與這些服務相關的識別端口。如果我們想要讓Apache監聽TCP端口81上,我們可以添加一條規則,以允許使用「semanage的」命令:

semanage port -a -t http_port_t -p tcp 81 

該服務允許通過SELinux的訪問可以得到端口的完整列表與:

semanage port -l 
相關問題