Apache ProxyPass 和 Node.js - 未提供 socket.io
Apache ProxyPass and Node.js - not serving up socket.io
我正在尝试 运行 Node.js 与我现有的 apache 一起使用,但在从我的 Express.js 服务器提供内容时遇到 ProxyPass 问题。问题似乎是Node服务器在Apache转发时看到的请求。
我试过这个配置:
<VirtualHost *:80>
DocumentRoot "/var/www/html"
ProxyPreserveHost on
ProxyPass /node http://localhost:3000/
ProxyPassReverse /node http://localhost:3000/
</VirtualHost>
节点是这样设置服务器的:
var express = require('express')
, app = express()
, server = require('http').createServer(app)
, io = require("socket.io").listen(server)
app.use(function(req, res, next){
console.log(req.method, req.url); // log the method and route
next();
});
app.use(express.static(__dirname + '/public'));
app.use('/components', express.static(__dirname + '/components'));
app.use('/js', express.static(__dirname + '/js'));
我通过节点记录了这个:
GET /
GET //components/bootstrap/dist/css/bootstrap.css
GET //components/font-awesome/css/font-awesome.css
GET //css/flags.css
GET //css/app.css
GET //components/jquery/dist/jquery.js
GET //components/bootstrap/dist/js/bootstrap.js
GET //socket.io/socket.io.js
GET //js/client.js
GET //components/bootstrap/dist/css/bootstrap.css.map
问题:当 apache 发送请求并且 socket.io 库未提供服务时,我收到一条额外的斜线。如何让 Apache 在到达 node.js 之前删除前导斜线?
我最终使用 HAProxy 坐在 node 和 apache 前面;正如上面评论中所建议的那样。
这些是我使用的设置:
frontend main
bind *:80
mode http
default_backend apache
acl is_node path_beg -i /node/
use_backend node if is_node
acl is_node_too path_beg -i /node
use_backend node if is_node_too
acl is_socket path_beg -i /socket.io/
use_backend socketio if is_socket
acl is_socketio_too path_beg -i /socket.io
use_backend socketio if is_socketio_too
backend apache
mode http
balance roundrobin
server apache localhost:81
backend node
mode http
balance roundrobin
server node localhost:3000
reqrep ^([^\ :]*)\ /node/(.*) \ /
reqrep ^([^\ :]*)\ /node(.*) \ /
backend socketio
mode http
balance roundrobin
server node localhost:3000
reqrep ^([^\ :]*)\ /node/(.*) \ /
reqrep ^([^\ :]*)\ /node(.*) \ /
我正在尝试 运行 Node.js 与我现有的 apache 一起使用,但在从我的 Express.js 服务器提供内容时遇到 ProxyPass 问题。问题似乎是Node服务器在Apache转发时看到的请求。
我试过这个配置:
<VirtualHost *:80>
DocumentRoot "/var/www/html"
ProxyPreserveHost on
ProxyPass /node http://localhost:3000/
ProxyPassReverse /node http://localhost:3000/
</VirtualHost>
节点是这样设置服务器的:
var express = require('express')
, app = express()
, server = require('http').createServer(app)
, io = require("socket.io").listen(server)
app.use(function(req, res, next){
console.log(req.method, req.url); // log the method and route
next();
});
app.use(express.static(__dirname + '/public'));
app.use('/components', express.static(__dirname + '/components'));
app.use('/js', express.static(__dirname + '/js'));
我通过节点记录了这个:
GET /
GET //components/bootstrap/dist/css/bootstrap.css
GET //components/font-awesome/css/font-awesome.css
GET //css/flags.css
GET //css/app.css
GET //components/jquery/dist/jquery.js
GET //components/bootstrap/dist/js/bootstrap.js
GET //socket.io/socket.io.js
GET //js/client.js
GET //components/bootstrap/dist/css/bootstrap.css.map
问题:当 apache 发送请求并且 socket.io 库未提供服务时,我收到一条额外的斜线。如何让 Apache 在到达 node.js 之前删除前导斜线?
我最终使用 HAProxy 坐在 node 和 apache 前面;正如上面评论中所建议的那样。
这些是我使用的设置:
frontend main
bind *:80
mode http
default_backend apache
acl is_node path_beg -i /node/
use_backend node if is_node
acl is_node_too path_beg -i /node
use_backend node if is_node_too
acl is_socket path_beg -i /socket.io/
use_backend socketio if is_socket
acl is_socketio_too path_beg -i /socket.io
use_backend socketio if is_socketio_too
backend apache
mode http
balance roundrobin
server apache localhost:81
backend node
mode http
balance roundrobin
server node localhost:3000
reqrep ^([^\ :]*)\ /node/(.*) \ /
reqrep ^([^\ :]*)\ /node(.*) \ /
backend socketio
mode http
balance roundrobin
server node localhost:3000
reqrep ^([^\ :]*)\ /node/(.*) \ /
reqrep ^([^\ :]*)\ /node(.*) \ /