我的服务器中有两个Node.js应用程序。他们正在列出端口55555
.这是目录结构。
/home/myuser
/.htaccess
/package.json
/server.js
/foo.com
/node_modules
/public
/index.html
/package.json
/server.js
/bar.com
/node_modules
/public
/index.html
/package.json
/server.js
/首页/我的用户/服务器.js内容
'use strict';
// Module dependencies.
var express = require('express');
var vhost = require('vhost');
var port = process.env.PORT || 55555;
function createVirtualHost(domainName, nodeApp) {
return vhost(domainName, nodeApp);
}
//Create server
var app = express();
var fooApp = require('./foo.com/server.js').app;
var barApp = require('./bar.com/server.js').app;
//Create the virtual hosts
var fooHost = createVirtualHost("www.foo.com", fooApp);
var barHost = createVirtualHost("www.bar.com", barApp);
//Use the virtual hosts
app.use(fooHost);
app.use(barHost);
//Start server
app.listen( port, function() {
console.log( 'Express server listening on port %d in %s mode', port, app.settings.env );
});
/home/myuser/.htaccess content
RewriteEngine On
RewriteRule ^$ http://127.0.0.1:55555/ [P,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://127.0.0.1:55555/$1 [P,L]
当我尝试访问www.foo.com
时,我收到错误为:
无法获取/foo.com/index.html.var
当我尝试访问www.bar.com
时,我收到错误为:
无法获取/bar.com/index.html.var
但是我可以使用像www.foo.com:55555
和www.bar.com:55555
这样的端口访问这两个站点
如何在不使用端口的情况下访问站点?
使用 Apache 作为应用的反向代理可以解决您的问题:
<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>
为此使用mod_proxy扩展名。 这篇数字海洋文章中提供了更多信息。