reverse-proxy - 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 应用程序。
干杯
解决方案
我在这里使用这个脚本来实现对 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);
推荐阅读
- python - Python/Kivy KeyError
- c - 优化:制作使用不同数据类型的结构
- node.js - 限制发送到 Facebook 的请求率的最佳方法
- asp.net-mvc - System.NullReferenceException:“对象引用未设置为对象的实例。”
- c++ - 跳过 C++ If 语句
- flutter - 用蓝牙颤振
- angular - 更新到 Angular 9 和 Typescript 3.8.3 后生成错误
- regex - Mod Rewrite - URL 中的正则表达式等号
- ios - 在 ios 中动态更改标签栏的可见性
- c# - 有没有办法在模板类中使构造函数默认值?