2013-03-14 2 views
0

Apache 서버의 포트 80에서 node.js 응용 프로그램을 실행하고 싶습니다. 내가 크롬 콘솔에서 502 proxy error을 받기를 사용할 때http-proxy를 사용하여 포트 80에서 node.js 앱을 실행하는 방법은 무엇입니까?

<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> 

: 나는이 방법 아파치를 통해 하나를 시도했다. 서버에서 내 CSSSocket.io 및 기타 JS 파일을 찾을 수 없습니다.

업데이트 : CSS 및 일반 .js 파일의 경우이 오류는 링크 앞에 http://domainName.com:8080/을 넣음으로써 해결되었습니다. 하지만 socket.io에는 여전히 문제가 남아 있습니다! Socket.io를 찾을 수 없습니다!

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); 

여기에서 설명했다 : how to put nodejs and apache in the same port 80

내가 돈 '

그리고 두 번째 방법은 http-proxy 모듈을 사용한다 (이것은 내가 찾은 예는,이 게시물 아래의 설명을 참조하시기 바랍니다) 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); 

나는 누군가가 나를 도와 수 있다면 그래서 내가 정말 고맙겠 일, 두 번째 방법을 선호합니다.

+0

http-proxy 코드를 그대로 사용하고 있습니까? 포트 80을 청취하고 포트 8080을 프록시하도록 구성해야합니다. –

+0

@AndreasHultgren 아니요, 말 그대로 아닙니다. 8080과 프록시를 8080으로 들으려고 변경했습니다. 제가 제공 한 링크를 보면 예제에 사용하고있는 express에 대한 내용이 없습니다. – Loolooii

+0

@AndreasHultgren이 예에 대한 링크입니다. http://stackoverflow.com/a/11174042/163799 – Loolooii

답변

3

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); 
+0

setMaxSockets는 로그인 한 사용자의 최대 수를 의미합니까? 나의 경우에는? – Loolooii

+0

그리고이 줄에 : var server = http.createServer (app); 나는 명시 적 응용 프로그램을 createServer()에 대한 인수로 제공하지만이 경우 어떻게해야합니까? 감사. – Loolooii

+1

setMaxSockets는 동시에 소켓 연결의 최대 수입니다. 별도의 앱으로 프록시를 실행하는 것이 가장 좋습니다 (특히 다른 앱/도메인으로 프록시하는 경우). 따라서 위의 내용을'start.js'라고 말하고'node start.js'로 실행하고 평상시대로 앱을 운영하십시오. 앱 자체에서 아무 것도 변경할 필요가 없습니다. –

관련 문제