我正在尝试使用Nginx代理由外部方托管的javascript和图像
我在https上运行我的网站,他们只通过http提供文件,我已经与他们联系过这个问题,但是当他们解决这个问题时无法给出时间表.
所以,我没有尝试在我的Nginx配置中使用proxy_pass这些文件,我有以下位置块
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;
}
我想要在我的页面上的小部件是.
所以我希望客户端请求通过我的服务器,该服务器具有https,这使我的服务器从外部服务器请求文件并将其服务器返回给客户端.目前这还没有工作,是在访问日志中看到请求,该请求还显示状态代码200但是图像或javascript文件都没有被发回.任何人都可以帮我解决我做错的事吗?
最佳答案
映射客户端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,因为我不知道您的服务器托管的其他位置(如果有).
您没有提到blogcounter.js的上游URL.上面的位置块也将映射:
https://my-domain.tld/blogcounter.js
到上游网址:
http://widget.external-domain.tld/blogcounter.js
有关详情,请参见this document.