首页 > 解决方案 > arangodb 3.1 落后于 apache 2.4 反向代理?

问题描述

我一直在尝试设置 apache 反向代理以使用 arangodb 3.1.19

我知道这是生命的尽头,但是...

我可以使其工作如下:

https://docs.arangodb.com/2.8/cookbook/MakingFoxxAppAccessible.html

ProxyPass /arangodb/ http://127.0.0.1:8529/
ProxyPassReverse /arangodb/ http://127.0.0.1:8529/
ProxyPass /_db/ http://127.0.0.1:8529/_db/
ProxyPassReverse /_db/ http://127.0.0.1:8529/_db/
ProxyPass /_api/ http://127.0.0.1:8529/_api/
ProxyPassReverse /_api/ http://127.0.0.1:8529/_api/

我还在发行说明中找到了 3.x 中的新功能

https://docs.arangodb.com/3.1/Manual/ReleaseNotes/NewFeatures30.html

关于在反向代理后面“挂载”arangodb 的方法的参考,

这对我来说听起来很像我正在寻找的东西,即共享 apache 反向代理的单个实例以反向代理各种服务,例如 Kibana (/KB/ )、ArangoDB (/ADB/ )、...。

我可以让 Kibana 工作,但对于 ArangoDB,我不确定需要做什么。

这是我在 http.conf 中所做的:

<Location "/ADB/">
Header set 'X-Script-Name' /ADB
ProxyPreserveHost On
ProxyPath http://127.0.0.1:8529/
proxyPassReverse http://127.0.0.1:8529/
</Location>

同时,我尝试在其 arangod.conf 中添加选项以信任来自 arangodb 的代理

[server]
frontend.proxy-request-check = true
frontend.trusted-proxy = proxy_hostname.my_domain

当我完成以上所有操作时,直接访问 ArangoDB 前端就像魅力一样,但是当访问 URL 时:proxy_hostname.my_domain:8443/ADB/_db/MyDB/_admin/aardvark/index.html 它失败并显示错误面板:

“与服务器的连接已丢失。服务器可能负载过重...尝试在 X 秒内重新连接”

浏览器检查器模块,显示对 URL proxy_hostname.my_domain:8443/ADB/_db/MyDB/.... 的代理请求会导致 URL proxy_hostname.my_domain:8443/_db/POC/ api/collection 之类的网络请求?=xxxxxx

因此,将整个 ArangoDB 前端停在“/ADB”basePath 后面的机制似乎不起作用。

我一定是遗漏了一些东西,我将不胜感激任何人的最佳建议,以在通用反向代理前端后面实现这个 arangodb 公园作为“/ADB”根 URI 后面的 Web 应用程序。

干杯

标签: reverse-proxyarangodb

解决方案


我在这里使用这个脚本来实现对 ArangoDB 的代理(尽管它非常基本)并且不是 Apache,而是在 NodeJS 中

我不需要弄乱 arangod.conf,它适用于 ArangoDB(E) 3.3.3,我希望它对你有用。

var net = require('net');

var LOCAL_PORT  = 6512;
var REMOTE_PORT = <ARANGODB PORT HERE>;
var REMOTE_ADDR = <ARANGODB HOST HERE>;

var server = net.createServer(function (socket) {
    socket.on('data', function (msg) {
        console.log('  ** START **');
        console.log('<< From client to proxy ', msg.toString());
        var serviceSocket = new net.Socket();
        serviceSocket.connect(parseInt(REMOTE_PORT), REMOTE_ADDR, function () {
            console.log('>> From proxy to remote', msg.toString());
            serviceSocket.write(msg);
        });
        serviceSocket.on("data", function (data) {
            console.log('<< From remote to proxy', data.toString());
            socket.write(data);
            console.log('>> From proxy to client', data.toString());
        });
    });
});

server.listen(LOCAL_PORT);
console.log("TCP server accepting connection on port: " + LOCAL_PORT);

推荐阅读