Restlet 如何正确建立关联 HATEAOS 链接?

Restlet how to build relates HATEAOS links properly?

在反向 proxy/load 平衡器后面构建一个 webapp,我需要获得请求的正确原始 URL(预负载平衡器重写)。

我已经使用 getReference()(在 ServerResource 中)添加了 HATEAOS 意义上的自引用。但是文档说 getReference() 可以由路由操作,目前它不包括正确的方案(http,而不是 https - 负载均衡器终止 https)。

这是关于 headers 转发的 NGINX 配置。

location /api {
        proxy_pass http://test-service;
        proxy_pass_header X-Host;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X_FORWARDED_PROTO $scheme;
}

是反向代理配置不正确,还是应该使用getOriginalReference()方法。是否有一些文档解释了 "original" 引用是如何构造的,哪些字段在反向代理后面使用。

我认为由于潜在的安全问题,必须在 Restlet 中明确启用 X-Forwarded-For header 的支持。

以下是在服务器连接器级别启用此功能的方法:

Component c = new Component();
Server server = c.getServers().add(Protocol.HTTP, 8182);
server.getContext().getParameters().add("useForwardedForHeader", "true");
c.start();

有关详细信息,请参阅此页面:http://restlet.com/technical-resources/restlet-framework/guide/2.3/core/base/connectors

完成后,相应的提示在 ClientInfo 中可用 object:

List<String> forwardedAddresses
   = request.getClientInfo().getForwardedAddresses();

请参阅此页面了解 headers 和 Restlet API 之间的映射:http://restlet.com/technical-resources/restlet-framework/guide/2.2/core/http-headers-mapping

希望这对你有帮助, 蒂埃里