6

gmail のような単純な Web ベースの電子メール クライアントを作成しました。画像を表示したいのですが、ssl サイトでそれを行うには、すべての画像を ssl 経由で提供する必要があります (そうしないと、「混合コンテンツ」の警告が表示されます)。したがって、gmail がこれらの画像を提供する必要があるようなリバース プロキシが必要です。

メール内のすべての画像 URL をリバース プロキシを指すように書き換えます。例えば:

私のリバース プロキシはhttps://myreverseproxy.comです。

元画像URL http://stuff.com/image1.jpg

URL をhttps://myreverseproxy.com?image-url=http://stuff.com/image1.jpgに書き換えます。

リバース プロキシがリクエスト " https://myreverseproxy.com?image-url=http://stuff.com/image1.jpg " を取得すると、クエリ パラメータ image-url ( http:// stuff.com/image1.jpg )、画像をフェッチし、それをhttps://myreverseproxy.com?image-url=http://stuff.com/image1.jpgのリクエスタに返します。

これをすぐに実行できるサービスはありますか? 簡単なものを書いてもいいですか?どこかにインストールできるライブラリやソリューションは既にありますか?

私はあらゆる言語とあらゆるプラットフォームにオープンです...この問題を解決したいだけです。

4

4 に答える 4

10

Tudor と同じことをお勧めします: node で書かれたプロキシです。

ただし、 node-http-proxyなど、より広く使用され、テスト済みのライブラリを使用することをお勧めします。セットアップは非常に簡単で、20 行未満のコードで必要なものを実現できます。

var httpProxy = require('http-proxy')

httpProxy.createServer({
  target: {
    host: 'stuff.com',
    port: 80
  },
  ssl: {
    key: fs.readFileSync('./ssl-key.pem', 'utf8'),
    cert: fs.readFileSync('./ssl-cert.pem', 'utf8')
  }
}).listen(443);

その後、クライアントがhttps://reverseproxy.com/image.pngにアクセスすると、プロセスは次のようになります。

ここに画像の説明を入力

このスキーマでは、画像を提供する Web サーバーとは別のサーバーでリバース プロキシが実行されると想定していますが、必ずしもそうである必要はありません。両方が同じサーバーで実行されている場合は、セクションで使用host: 'localhost'してtargetください。

--

Node に慣れていない場合に備えて、このセットアップをすばやく実行するために必要なことを次に示します。

  • ノードのインストール
  • yourprojectpath/index.jsにコードを含む新しいファイルを作成します
  • npm initプロジェクトのディレクトリで実行して、package.json ファイルを生成します。
  • 実行npm install --save http-proxyしてライブラリをインストールhttp-proxyし、コードで使用できるようにします

を実行してリバース プロキシを実行できるようになりました。

node index.js

これを本番環境で使用する予定がある場合は、 PM2を確認することを強くお勧めします。基本的に、アプリケーションが常に実行されていることを保証するノードのプロセス マネージャーです。特に、何らかの種類の例外がアプリケーションからスローされ、アプリケーションが終了する原因となった場合に、アプリケーションを再起動します。

インストール:

npm install -g pm2

使用法:

pm2 start index.js

さらにいくつかのメモ:

  • .pemファイルに適切な権限と所有者が割り当てられていることを確認してください。chmod 400通常は適切なオプションです (所有者のみが読み取り可能)。ただし、Node アプリケーションを実行しているユーザーはそれらを読み取ることができるはずです。
  • サーバーが (ソフトウェアまたはハードウェア) ファイアウォールの背後で実行されている場合は、着信トラフィックに対してポート 443 を開く必要がある場合があります。
  • SSL 証明書プロバイダーによっては、提供されるファイルを PEM 形式に変換する必要がある場合があります。
  • 必要に応じて、 node-http-proxy は、リクエストがプロキシされるときにヘッダーを追加するなどの追加オプションをサポートします
  • 上記のスクリプトは、 があり、それと同じディレクトリにあることを前提ssl-key.pemとしていますssl-cert.pem

それが役立つことを願っています! そして、何か不明な点があるかどうか尋ねてください

于 2016-04-09T21:47:02.563 に答える
0

nginxで簡単にできます。ところで、それはあなたが尋ねるように行うことができ、元のURLのようにURLをまったく同じにすることも可能です. たとえば、cdn.xxx.com/img.jpg - www.xxx.com/img.jpg です。

于 2016-04-14T19:23:11.493 に答える
-1

リチャード、nginx 構成ファイルで CORS を有効にすることで、混合コンテンツの問題を簡単に解決できます。例はhttp://enable-cors.org/server_nginx.htmlです。これでは、誰にでもcorsを許可しています。特定のドメインまたはIPを設定できます。詳細を調べる必要があります.

于 2016-04-15T06:34:56.793 に答える