在反向代理/负载均衡器后面构建一个webapp,我需要获取请求的正确原始URL(预加载均衡器重写)。
我使用了getReference()(在ServerResource中)来添加HATEAOS意义上的自引用。但是文档说getReference()可以由路由操纵,目前它不包含正确的方案(http,而不是https - 负载均衡器终止https)。
以下是有关转发标头的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()方法。是否有一些文档可以解释"原始"构造了引用,在反向代理后面使用了哪些字段。
答案 0 :(得分:1)
我认为由于潜在的安全问题,必须在Restlet中明确启用X-Forwarded-For
标头的支持。
以下是将此功能作为服务器连接器级别启用的方法:
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对象中提供了相应的提示:
List<String> forwardedAddresses
= request.getClientInfo().getForwardedAddresses();
有关标头和Restlet API之间的映射,请参阅此页面:http://restlet.com/technical-resources/restlet-framework/guide/2.2/core/http-headers-mapping。
希望这可以帮到你, 亨利