我正在尝试与现有的apache一起运行Node.js,并且在从Express.js服务器提供内容时遇到ProxyPass问题。看起来麻烦的是节点服务器在Apache转发时看到的请求。
我试过这个配置:
undefined
节点就像这样设置服务器:
<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'));
问题:当apache发送请求并且未提供socket.io库时,我得到一个额外的斜杠。如何让Apache在进入node.js之前删除前导斜杠?
答案 0 :(得分:0)
我最终选择了HAProxy来坐在节点和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/(.*) \1\ /\2
reqrep ^([^\ :]*)\ /node(.*) \1\ /\2
backend socketio
mode http
balance roundrobin
server node localhost:3000
reqrep ^([^\ :]*)\ /node/(.*) \1\ /\2
reqrep ^([^\ :]*)\ /node(.*) \1\ /\2