外部托管的 Nginx 代理图像/javascript

外部托管的 Nginx 代理图像/javascript

我正在尝试使用 nginx 代理由外部方托管的 javascript 和图像

我在 https 上运行我的网站,但他们只通过 http 提供文件,我已经就此事与他们联系过,但他们无法给出解决此问题的时间表。

所以不,我正在尝试proxy_pass在我的 nginx 配置中使用这些文件,我有以下位置块

location /blogcounter/image {
        #rewrite ^/blogcounter(.*) /$1 break;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_pass http://widget.external-domain.tld/$uri$is_args?$args;
}
location /blogcounter.js {
        #rewrite ^/blogcounter(.*) /$1 break;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_pass http://widget.external-domain.tld/$uri$is_args?$args;
}

我想要的页面上的小部件是。

<a title="external-domain.tld" href="http://external-domain.tld/" id="hr-random_id" target="_parent">
    <img src="https://my-domain.tld/blogcounter/image?image=red_s&blog_id=random_id" alt="alt-text" border="0">
</a>
<script type="text/javascript"> 
    var hr_currentTime = new Date(); 
    var hr_timestamp = Date.parse(hr_currentTime.getMonth() + 1 + "/" + hr_currentTime.getDate() + "/" + hr_currentTime.getFullYear()) / 1000;
    document.write('<script type="text/javascript" src="https://my-domain.tld/blogcounter.js?blog_id=random_id&timestamp=' + hr_timestamp +'"></script>'); 
</script>

因此,我希望客户端请求通过具有 https 的服务器,这使我的服务器从外部服务器请求文件并将其返回给客户端。目前这还不起作用,在访问日志中看到请求也显示状态代码 200,但图像或 javascript 文件都没有返回。有人能帮我解决我做错的事情吗?

答案1

映射客户端 URL 如下:

https://my-domain.tld/blogcounter/image?image=red_s&blog_id=random_id

到上游 URL 如:

http://widget.external-domain.tld/blogcounter/image?image=red_s&blog_id=random_‌​id

不需要神奇的 URI 转换,因此最简单的proxy_pass形式就是所需的一切:

location /blogcounter {
    proxy_pass http://widget.external-domain.tld;
    proxy_set_header ...;
    ...
}

/请注意,由于请求 URI 未经修改就向上游传递,因此不存在尾随。

我已将位置设置为,/blogcounter因为我不知道您的服务器托管的其他位置(如果有)。

您没有提及 的上游 URL blogcounter.js。上述位置块还将映射:

https://my-domain.tld/blogcounter.js

到上游 URL:

http://widget.external-domain.tld/blogcounter.js

这个文件了解详情。

相关内容