日常の開発プロセスでは、CDN 上に配置されたいくつかの静的ファイル (JavaScript、CSS、HTML ファイルなど) を変更する必要がよくあります。このプロセスでは、オンラインのディレクトリをマップする方法が必要です。ローカル ハードディスクへの CDN この方法では、ファイルをローカルで変更する場合、公開する必要がなく、更新後すぐに効果が確認できます。
たとえば、CDN ドメイン名は http://a.mycdn.com で、対応するローカル ディレクトリは D:workassets です。 http://a.mycdn.com/* へのすべてのアクセスが可能になることを願っています。ローカル D:workassets* の下にマッピングされます。たとえば、http://a.mycdn.com/s/atp.js にアクセスすると、実際には、インターネットからオンライン ファイルをダウンロードせずに、ローカルの D:workassetssatp.js を読み取っていることになります。
この関数の実装は非常に簡単で、重要なポイントは次のとおりです:
1. HTTP サービスをローカルで開き、ポート 80 をリッスンします。
2. システムのホスト ファイルを変更し、「127.0.0.1 a.mycdn」を追加します。 .com" に変更し、CDN ドメイン名を変更します。 ローカル サーバー アドレスにバインドします。
3. ローカル HTTP サービスを設定します。 GET リクエストを受信した後、まず、対応するファイルがローカル ハードディスク上に存在するかどうかを確認します。 存在する場合は、リターンします。ファイルの内容が存在しない場合は、対応する内容を返します。
ご覧のとおり、重要な部分はローカル HTTP サービスを構築することです。この分野には、Apache や Ngnix などのサーバー ソフトウェアをローカルにインストールし、対応する転送ルールを構成するなど、多くのチュートリアルがあります。ただし、この方法はまだ少し複雑だと個人的に感じています。この記事で紹介するのは、サーバー ソフトウェアのインストールを必要としない別の方法です。
ローカルで開発とデバッグを行うため、パフォーマンスと同時実行性の要件は高くありません。実際には、Apache/Ngnix のような専門的な HTTP ソフトウェアは必要ありません。HTTP サービスを提供できるスクリプトのみが必要です。たとえば、nodejs を使用して実装します。
コードをコピーします コードは次のとおりです:
/**
* 著者: oldj
*
**/
var http = require("http"),
url = require("url"),
path = require ("path" ),
fs = require("fs"),
local_folders,
Base_url;
local_folders = [ // ローカル パス。エージェントはこのリストのディレクトリでファイルを検索し、見つからない場合は、オンライン アドレスに移動します
"D:/work/assets"
];
base_url = "http://10.232.133.214"; // オンライン パス、ファイルが見つからない場合は、このアドレスにリダイレクトします
function loadFile(pathname, response ) {
var i, l = local_folders.length,
fn;
console.log("try toload " + pathname);
for (i = 0; i
fn = local_folders[i] + pathname;
if (path.existsSync(fn) && fs.statSync(fn).isFile()) {
fs.readFile(fn, function (err, data) {
応答.writeHead(200) ;
response.write(data);
response.end();
});
return;
}
}
response.writeHead(302, {
"場所":base_url + pathname
} );
response.end();
}
http.createServer(
function (request, response) {
var req_url = request.url,
pathname;
// 処理は http: //www.php.cn /,tbsp/tbsp.css?t=20110920172000.css リクエスト
pathname = req_url.indexOf("??") == -1 url.parse(request.url).pathname : req_url ;
console.log( "リクエスト '" + パス名 + "' を受け取りました。");
loadFile(パス名, 応答);
}).listen(80);
値の変更に注意してください必要な値については、上記の local_folders 変数とbase_url 変数を使用してください。たとえば、このファイルを local-cdn-proxy.js として保存し、コマンド ラインで「node local-cdn-proxy.js」を実行します。もちろん、ローカル サーバーが実行されることを忘れないでください。ホスト。
http 経由でパスにアクセスすると、上記のスクリプトはまず対応するローカル ディレクトリを検索し、見つかった場合は対応するファイルの内容を返します。見つからない場合は、対応するオンライン アドレスに直接ジャンプします。 。見つからない場合の別の解決策は、ローカル サーバーにオンラインから対応するコンテンツをダウンロードさせて返すことですが、この要件の場合は 302 ジャンプで十分です。
nodejs バージョンに加えて、Python バージョンも作成しました:
コードをコピーします コードは次のとおりです:
# -*-coding: utf-8 -*-
#
# 著者: oldj
#
import os
import BaseHTTPServer
LOCAL_FOLDERS = [
"D:/work/assets"
]
BASE_URL = "http://10.232.133.214"
class WebRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler) :
def do_GET(self):
print "'%s' のリクエストを受信しました。" % self.path
LOCAL_FOLDERS のフォルダー:
fn = os.path.join(folder, self.path.replace("/", os.sep)[1:])
break
self.send_response(302)、80)、webrequesthandler)
server.serve_forever() Node.jsのバージョン。
上記 2 つのコードの機能は比較的単純です。たとえば、出力コンテンツの MIME-Type や Content-Length などのヘッダー情報はなく、考えられるブロック操作 (たとえば、ファイル読み取りタイムアウトなど)。これらはローカル開発環境向けにすでに動作するバージョンであり、より多くのニーズを満たすためにこれら 2 つのスクリプトを拡張し続けることができます。
nodejs と Python で書かれた単純な HTTP 静的ファイル サーバーに関するその他の関連記事については、PHP 中国語 Web サイトに注目してください。