Ghost位于子目录中并通过node-http-proxy

时间:2014-01-29 04:33:08

标签: node-http-proxy ghost-blog

我正在尝试在另一个nodejs / express app的子目录中设置Ghost博客程序(v0.4)。我按照此处列出的步骤开始工作:Node http-proxy and express

所以,我通过Express这样(在我的开发机器上)从我的主应用程序设置代理到Ghost:'

var proxy = new httpProxy.createProxyServer();
server.get('/blog*', function (req, res, next) {
    proxy.web(req, res, {
        target: 'http://localhost:2368'
    });
});

这可以访问博客内容。但是,当我去/ blog / ghost / signin并尝试登录时,我得到了404.据我所知,登录页面不会出现在博客/目录之外的任何地方,为什么会失败?

如果我直接查看博客(在端口2368上),我可以正常登录。

1 个答案:

答案 0 :(得分:2)

您已为GET定义了路由,因此您只代理GET请求,但登录和注册使用POST请求。通常Apache或nginx中的代理规则将代理给定URL的所有允许方法,但由于您通过方法定义处理程序,因此不会发生这种情况。

注册POST获得404,因为它由您的第一个不知道该做什么的节点应用程序处理。

除了POST之外,您还需要DELETE方法才能点击通知消息并删除帖子。我不确定是否还需要其他方法(OPTIONS),GET,POST和DELETE是我观察到的唯一方法,如果你查看页面所做的请求,你会看到哪个方法失败了。与Firebug。

要解决此问题,请添加您添加的相同处理程序,以及用于发布,放置和删除的内容:

server.post('/blog*', function (req, res, next) {
    proxy.web(req, res, {
        target: 'http://localhost:2368'
    });
});
server.delete('/blog*', function (req, res, next) {
    proxy.web(req, res, {
        target: 'http://localhost:2368'
    });
});
server.put('/blog*', function (req, res, next) {
    proxy.web(req, res, {
        target: 'http://localhost:2368'
    });
});

这样,管理界面工作正常。