How to run node.js app on port 80 using http-proxy?
我想在Apache服务器的端口80上运行我的node.js应用程序。 我已经尝试了两种方法,一种通过Apache:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <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控制台中显示
更新:我通过将
第二种方法是使用
1 2 3 4 5 6 7 8 9 10 11 12 | 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
我不知道如何使此代码适用于我的代码,因为我正在使用
这是我相关的代码部分:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 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进行工作,这是我的设置。 我不确定这是否是最好的(我希望它与路由器对象一起工作),但是它可以工作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | 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); |