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×tamp=' + hr_timestamp +'"></script>');
</script>
したがって、クライアント要求が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
アップストリームURLへ:
http://widget.external-domain.tld/blogcounter.js
詳細については、 このドキュメント を参照してください。