我有一台主机,它为许多not应用程序提供服务(不是基于node.js的)。它使用不同的端口来完成这个任务。这意味着,例如,下列应用程序处于活动状态:
接下来,我有一个基于node.js的webapp (运行在端口80上),我想使用它作为一种路由器。当有人导航到http://localhost/app/app1时。我想让它导航到http://hostname:3000。使用简单的重定向,这是相对简单的。但是,我希望保存url http://localhost/app/app1。有人能告诉我一种使用node.js/express来实现这个工作的方法吗?
我的路由逻辑看起来有点像(伪代码)。
app.route('/app/:appName')
.get(appEngine.gotoApp);
appEngine.gotoApp = function(req, res) {
redirectToApp logic
}发布于 2015-05-13 12:14:05
如果使用express,可以尝试使用cli应用程序生成器创建应用程序。
它创建了一个express应用程序,并通过模块导出返回它。
在server.js文件中,它传递给服务器实例的侦听函数、快捷应用程序对象。
您可以创建更多的服务器对象,并通过不同的端口收听不同的应用程序。
var server = http.createServer(app);
server.listen(port);
var server2 = http.createServer(app2);
server2.listen(port2);如果您想要基于url指向不同的应用程序,您可以实例一个快速路由器而不是快递对象。
var app1 = express.Router();然后,您可以使用经典的get、post或其他方法设置进入该对象的所有路由。
现在,您可以通过路由器作为您的主要快递应用的中间件。
app.use( "app1/", app1 );您还可以将一个快速应用程序传递给中间件,而不是路由器对象,以获得通过不同的url和端口服务器侦听应用程序的可能性。
发布于 2015-05-13 12:25:50
您可能最好使用Nginx设置一个反向代理,每个应用程序都有不同的位置。
这不是您所要求的,因为它不使用node.js,但如果它是唯一的目的,Nginx确实适合您的需求。
例如,像Nginx这样的配置文件应该以您想要的方式工作:
server {
listen 80;
server_name myapp.com;
location /app1 {
proxy_pass http://APP_PRIVATE_IP_ADDRESS:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location /app2 {
proxy_pass http://APP_PRIVATE_IP_ADDRESS:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location /app3 {
proxy_pass http://APP_PRIVATE_IP_ADDRESS:3003;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}发布于 2020-01-11 22:26:05
有一个不错的http-proxy库正是为此而设计的!
const httpProxy = require('http-proxy');
const url = require('url');
const proxy = httpProxy.createProxy();
const options = {
'/app/app1': 'http://localhost:3000',
'/app/app2': 'http://localhost:3001',
'/app/app3': 'http://localhost:3003',
}
require('http').createServer((req, res) => {
const pathname = url.parse(req.url).pathname;
for (const [pattern, target] of Object.entries(options)) {
if (pathname === pattern ||
pathname.startsWith(pattern + '/')
) {
proxy.web(req, res, {target});
}
}
}).listen(80);https://stackoverflow.com/questions/30212178
复制相似问题