使用nginx和node.js,如何删除直接IP:端口访问

3

我接手了一个node.js项目,但我对这个平台/语言非常陌生。

我接手的应用程序还在开发中,目前它运行在7576端口,您可以通过以下方式访问它:server_ip:7576。

我的任务是将这个"原型"放在一个实际服务器上,以便老板可以向投资者展示等内容。但是我必须保护密码。

所以我做的是在实际服务器上让它运行起来。然后我使用nginx vhost使其像这样运行:

server {
        listen 80;

    auth_basic            "Restricted";
    auth_basic_user_file  /usr/ssl/htpasswd;

        access_log   /etc/nginx/logs/access/wip.mydomain.com.access.log;
        error_log  /etc/nginx/logs/error/wip.mydomain.com.error.log;
        server_name  wip.mydomain.com;

        location / { 
            proxy_pass http://127.0.0.1:7576;
            root         /var/app;
            expires 30d; 
            #uncomment this is you want to name an index file: 
            #index index.php index.html;
            access_log off; 
        }

        location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|html|htm)$ {
            root         /var/app/public;
        }
}

这样做可以解决问题,现在我可以通过访问wip.mydomain.com来访问我的应用程序。

而且我可以通过nginx轻松进行密码保护。

我的问题是应用程序仍然可以通过ip:port访问,我不知道如何防止这种情况发生。

感谢任何帮助。

谢谢


这要看情况:如果 nginx 与节点服务器在同一台本地机器上,您可以将节点更改为仅侦听 localhost/127.0.0.1。如果它们位于不同的服务器上,则需要在网络层解决此问题(例如防火墙等)。 (防火墙方法也适用于第一种情况,供参考。) - Joe
nginx与节点服务器在同一台本地机器上。我的节点应用程序已经在本地主机上监听7576端口。您的意思是让它监听80端口吗?如果我误解了,请原谅。 - vesperknight
如果可以从盒子外部访问,则正在侦听0.0.0.0(所有接口)。您需要更改侦听器的位置,以明确仅侦听127.0.0.1。 - Joe
1
嗯...太奇怪了。我非常确定它没有监听0.0.0.0,而是已经在监听localhost/127.0.0.1了。无论如何,我向另一个了解很多的人询问,他建议我添加一些iptables规则。我添加了:iptables -A INPUT -p tcp --dport 7576 -s 127.0.0.1 -j ACCEPT iptables -A INPUT -p tcp --dport 7576 -j DROP这样就解决了问题。 - vesperknight
如果第二个规则“起作用”,那么这意味着它正在监听不止127.0.0.1。您的进程在netstat -anp中显示了什么? - Joe
你有做过 .listen(…, "127.0.0.1"); 吗?你发誓了吗? - Константин Ван
1个回答

9
在您的Node.js代码中,您需要显式绑定到环回IP:
server.listen(7576, '127.0.0.1');

你正在寻找一个调用.listen(<port>)来解决问题。变量可能被称为app或其他名称。

任何以127。开头的IP地址都是环回地址,只能在单台计算机内访问(实际上不使用网络)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接