我一直在运行 https://www.mediawiki.org/wiki/Wikibase/Installation、https://www.mediawiki.org/wiki/Wikidata_Query_Service/Implementation/Standalone (https://github.com/wikimedia/wikidata-query-rdf) 和 https://github.com/wikimedia/wikidata-query-gui。我正在通过隧道进入该服务器以访问本地计算机上的内容。
GUI(在服务器上运行 localhost:8080,在本地计算机上运行 localhost:600)正在尝试联系查询服务,特别是 Blazegraph,它通过 Jetty 服务器运行(服务器上的 localhost:9999 和本地机器)。
一切都根据单独的组件进行(成功安装,没有错误),如果在 Blazegraph UI 中输入 SPARQL 查询或将其复制粘贴到浏览器中,则会生成正确的 RDF 输出。然而,如果查询是从 Wikidata 查询服务 GUI 运行的,它会产生一个 net::ERR_FAILED 200
并且:
Access to XMLHttpRequest at 'http://localhost:9999/bigdata/sparql' from origin 'http://localhost:600' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Wikidata 查询服务 GUI 使用 npm start
运行,而后者又运行 http-server --cors='*'
。 localhost:9999
处的 Blazegraph 使用以下命令运行:
sudo BLAZEGRAPH_OPTS="-DwikibaseConceptUri=http://localhost:400" bash /var/lib/mediawiki/extensions/wikidata-query-rdf/dist/target/service-0.3.111-SNAPSHOT/runBlazegraph.sh
我不确定如何允许 Wikidata 查询服务 GUI 访问 Wikidata 查询服务,因此非常感谢任何帮助!
更新 1:说这是 Jetty 9 可能会有所帮助?
回答1
我终于想通了,通过在/etc/apache2/sites-enabled/000-default.conf
中添加一个代理,如下:
<VirtualHost *:9000>
Header add Access-Control-Allow-Origin "*"
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:9999/
ProxyPassReverse / http://127.0.0.1:9999/
</VirtualHost>
然后它会监听来自 localhost:8080->localhost:9000 的调用,并将调用重定向到 localhost:9999。我还在相关的 https://phabricator.wikimedia.org/T308180 页面中添加了更多信息。