[英]How to run node.js app on port 80 using http-proxy?
我想在Apache服務器上的端口80上運行我的node.js應用程序。 我已經嘗試了兩種方法,一種通過Apache:
<VirtualHost *:80>
ServerName domainName.com
ServerAlias www.domainName.com
ProxyRequests off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
<Location />
ProxyPass http://domainName:8080
ProxyPassReverse http://domainName:8080
</Location>
</VirtualHost>
使用此功能時,我在Chrome控制台中收到502 proxy error
。 服務器找不到我的CSS
和Socket.io
及其他JS
文件。
更新:我通過將http://domainName.com:8080/
放在鏈接前面解決了CSS和普通.js文件的錯誤。 但是問題對於socket.io仍然存在! 找不到Socket.io!
第二種方法是使用http-proxy
模塊(這是我找到的示例,請參見本文下方的注釋):
var http = require('http'),
httpProxy = require('http-proxy'),
proxyServer = httpProxy.createServer ({
hostnameOnly: true,
router: {
'domain.com': '127.0.0.1:81',
'domain.co.uk': '127.0.0.1:82',
'127.0.0.1': '127.0.0.1:83'
}
});
proxyServer.listen(80);
這里解釋了: 如何將nodejs和apache放在同一端口80
由於使用Express
,因此我不知道如何將此代碼用於我的代碼。
這是我相關的代碼部分:
var express = require('express');
var http = require('http');
var io = require('socket.io');
var connect = require('connect');
var sanitize = require('validator').sanitize;
var app = express();
var MemoryStore = express.session.MemoryStore;
var server = http.createServer(app);
var sessionStore = new MemoryStore();
var io = io.listen(server);
app.configure(function() {
//app.use(express.logger());
app.use(express.cookieParser());
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.session({
store: sessionStore,
secret: 'someSecret',
key: 'cookie.sid', maxAge: null }));
});
app.use(app.router);
app.use("/styles", express.static(__dirname + '/styles'));
app.use("/images", express.static(__dirname + '/styles/images'));
app.use("/js", express.static(__dirname + '/js'));
// routing
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});
server.listen(8080);
我更喜歡第二種方法,因此,如果有人可以幫助我使其正常工作,我將非常感激。
為了使socket.io在具有多個域的節點http-proxy中工作,這是我的設置。 我不確定這是否是最好的(我希望它與路由器對象一起工作),但是它可以工作。
var http = require('http'),
httpProxy = require('http-proxy');
httpProxy.setMaxSockets(4096);
var server1 = new httpProxy.HttpProxy({
target: {
host: '127.0.0.1',
port: '3000'
}
});
var server2 = new httpProxy.HttpProxy({
target: {
host: '127.0.0.1',
port: '3001'
}
});
var server = http.createServer(function(req ,res){
switch(req.headers.host){
case 'server1.com':
server1.proxyRequest(req, res);
break;
case 'server2.com':
server2.proxyRequest(req, res);
break;
}
});
server.on('upgrade', function(req, socket, head){
// Cases need only for servers that actually use websockets
switch(req.headers.host){
case 'server1.com':
server1.proxyWebSocketRequest(req, socket, head);
break;
case 'server2.com':
server2.proxyWebSocketRequest(req, socket, head);
break;
}
});
server.listen(80);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.