我正在寻找代理 mapquest OSM 图块,以便我可以通过 SSL 将它们提供给我的用户。这是我的 nginx 配置:
upstream maptile_server {
server otile1.mqcdn.com;
server otile2.mqcdn.com;
server otile3.mqcdn.com;
server otile4.mqcdn.com;
}
server {
# ...
server_name app.example.com;
location /tiles {
proxy_pass http://maptile_server;
}
}
因此,如果地图图块存在于http://otile1.mqcdn.com/tiles/1.0.0/osm/14/3678/6230.png,我想访问https://app.example.com/tiles/1.0.0/osm/14/3678/6230.png。
目前我收到“无效 URL”错误。
编辑:
我也考虑过做这样的事情:
location ~ /maptiles/(?<subdomain>.+)/(?<z>.+)/(?<x>.+)/(?<y>.+) {
return http://$subdomain.mqcdn.com/tiles/1.0.0/osm/$z/$x/$y;
}
但这会将我重定向到最终 URL,而不是代理请求。 有什么方法可以向客户端隐藏最终 URL?
答案1
也许你忘记了proxy_set_header Host "otile1.mqcdn.com";
?
请注意,所有上游服务器都必须能够接受此类Host
标头,认为其有效且适当。
如果您不手动定义Host
标头,那么可能不会向上游提供主机标头。
http://wiki.nginx.org/HttpProxyModule#proxy_set_header
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_set_header
http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream
如果使用该模块,文档并不完全清楚Host
默认设置是什么upstream
;但您的情况听起来好像某些功能目前可能缺失!