我正在尝试在同一台服务器上运行两个快速应用程序(一个是公共API,另一个是与数据库通信的私有API)。
我已经设置了nginx来反向代理到我的公共快递应用程序,该应用程序在端口3000上运行,具有来自数字海洋的私有IP。
我的公共快递应用程序向私人api发送请求(在端口3030上运行)
当我访问我的域example.com3030/users时 - 我可以看到所有用户。 (坏)。
如何从公众锁定端口3030(即:website.com/3030/API-ROUTE)?
nginx设置:
server {
listen 80;
server_name 123.456.78.910;
root /srv/www;
location / {
root /srv/www/public;
try_files $uri/maintenance.html @node_app;
}
location @node_app {
proxy_pass http://98.765.4.32:3000;
proxy_http_version 1.1;
proxy_set_header X-NginX-Proxy true;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
公共API
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('Hello public World!');
});
app.listen(3000, function () {
console.log('Example app listening on port 3000!');
});
私有API
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('Hello Private World!');
});
app.listen(3030, function () {
console.log('Example app listening on port 3030!');
});
答案 0 :(得分:1)
您可以在多个层锁定对此端口的访问。
首先,在Node.js中,您可以告诉您的Node.js应用绑定到特定的IP地址,即127.0.0.1:
app.listen(3030, '127.0.0.1');
接下来,您可以锁定操作系统级别的访问权限。例如,使用Ubuntu Linux,您可以使用ufw
定义仅允许从localhost访问此端口的规则。
最后,外部设备上其他地方的防火墙规则可能会限制访问。例如,使用AWS安全组,您可以定义一个规则,即只允许从该组中的其他服务器访问特定组中服务器的端口3030,并且该组中可能只有一个服务器。
另一种方法是listen on a Unix socket而不是IP地址。