Nginx-将请求转发到绝对URL

Nginx-将请求转发到绝对URL

我正在寻找代理 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;但您的情况听起来好像某些功能目前可能缺失!

相关内容