web-dev-qa-db-ja.com

外部でホストされているNginxプロキシイメージ/ javascript

Nginxを使用して外部パーティによってホストされているJavaScriptと画像をプロキシしようとしています

私は自分のサイトをhttpsで実行していて、http経由でのみファイルを提供しています。これについてはすでに連絡を取り合っていますが、解決するためにタイムラインを提供できません。

だから私はproxy_passnginx構成内のこれらのファイル次のロケーションブロックがあります

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ファイルも返送されません。誰かが私が間違っていることを手伝ってくれる?

2
Aegis

次のようなクライアント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

詳細については、 このドキュメント を参照してください。

2
Richard Smith