【Node.js入門】HTTP / HTTPS通信できるproxyサーバの作り方まとめ!

今回は、Node.jsで簡単にproxyサーバを構築する方法からHTTPS通信を行う手法についても合わせてご紹介していきます!

「そもそもproxyって何?」
「HTTPS通信でproxyサーバを使う方法が知りたい」
「便利なproxy関連のモジュールを使いたい」

このような内容も含めて、本記事では以下のような構成で解説していきます!

【基礎】「proxyサーバ」とは?
【基礎】「proxyサーバ」の作り方
【実践】HTTPS通信でproxyサーバ

この記事で、proxyサーバ構築法をしっかり学習してスキルアップを目指していきましょう!

「proxyサーバ」とは?

まずは、proxy(プロキシ)サーバとは何かをおさらいしておきましょう!

「proxyサーバ」は簡単に言うと、自分のパソコンからではなく別のコンピュータを経由して目的のWebサイトにアクセスできるサーバのことです。

自分のパソコンから直接Webサイトにアクセスしなくて良いので、IPアドレスなどを漏洩するリスクを避けることが可能です。

また、他国を経由することも可能なので、例えばネット検閲が厳しい中国から別の国で公開されているサイトやサービスを利用することもできるわけです。

このようにproxyサーバを経由することで、通常よりも匿名性が高くなるわけですが、それだけ通信速度も遅くなるという点は考慮しておきましょう。

proxyサーバの作り方

この章では、Node.jsを使ってproxyサーバを作る方法を見ていきましょう!

主に、簡単に構築できるhttp-proxyモジュールの使い方について学んでいきます。

「http-proxy」モジュールの導入

まずは、「http-proxy」モジュールを導入する方法から見ていきましょう!

本体モジュールはnpmから簡単にインストールすることができます。

$ npm install http-proxy

あとは、Node.jsから扱えるようにrequire()を設定しておきます

var http = require(‘http’);
var httpProxy = require(‘http-proxy’);

合わせて「http」モジュールも扱えるようにrequire()しておきましょう。

これにより、proxy経由で閲覧するWebサイトのサーバーも自分で構築して確認することができます。

ちなみに、httpモジュールについてまだ理解してない方は、次の記事で体系的にまとめているので参考にしてみてください!

【Node.js入門】httpモジュールでサーバー構築、GET・POST通信方法
更新日 : 2021年7月1日

基本的なproxyサーバを作る

それでは、実際にproxyサーバを作っていきましょう!

もっとも基本的なproxyサーバは「createProxyServer()」メソッドを実行するだけで構築することができます。

次のサンプル例を見てください!

httpProxy.createProxyServer({

    target: ‘http://localhost:9000’

}).listen(8080);

この例では、ローカルサーバーで立ち上げたWebページをproxyサーバで閲覧するようにしています。

引数のオプションで「target」プロパティに閲覧したいサイトのURLを設定するだけなので簡単ですね。

ローカルサーバーの構築は次のように簡単なもので確認すると良いでしょう。

http.createServer(function(req, res) {

    res.write('Hello Proxy');
    res.end();

}).listen(9000);

これで「http://localhost:8080」でブラウザから閲覧すると、画面に「Hello Proxy」の文字列が出力されているのが分かります。

proxyサーバでHTTPS通信

この章では、HTTPS通信によるproxy経由のプログラミングについて見ていきましょう。

主に、「http-proxy」モジュールを利用した方法について学んでいきます。

基本的なHTTPS通信によるproxyサーバ

今回は「createServer()」メソッドを利用して、「target」「ssl」のオプションを設定するのがポイントです。

var httpProxy = require('http-proxy');

httpProxy.createServer({
  target: '【閲覧するWebサイト】',
  ssl: { 【SSL証明書関連】 },
  secure: true
}).listen(443);

「target」オプションはHTTPS通信で閲覧したいWebサイトのURLになります。

「ssl」オプションはSSL証明書を記述するので、事前に証明書の入手が必要になります。

実際にコードで記述すると以下のようになります。

var httpProxy = require('http-proxy');

httpProxy.createServer({
  target: 'https://example.com',
  ssl: {
    key: fs.readFileSync('valid-ssl-key.pem', 'utf8'),
    cert: fs.readFileSync('valid-ssl-cert.pem', 'utf8')
  },
  secure: true
}).listen(443);

これで実行するとHTTPS通信によるproxy経由のネット接続ができるようになります。

まとめ

今回は、Node.jsでproxy経由によるネット接続を行う方法について学習しました!

最後に、もう一度ポイントをおさらいしておきましょう!

・proxy経由でネット接続すると匿名性が向上する
・HTTP通信でproxy接続するにはcreateProxyServer()メソッドを利用する
・HTTPS通信でproxy接続するにはcreateServer()メソッドを利用する

上記内容を踏まえて、ぜひ自分でもプログラミングに取り入れて活用できるように頑張りましょう!

Writer

マサト

フリーランス

フリーランスのIT系ライターを10年従事する兵庫県出身の40歳。侍ブログ編集部としては、これまで270記事以上を執筆。
30歳を過ぎてから独学でJavaScript, Node.js, Linuxを習得した経験を活かし、初心者が迷わない記事作成を意識しながらプログラミングの楽しさを知ってもらうために活動しています。趣味はキャンプと登山です。

あなたの目的に合わせた
SAMURAI ENGINEERの運営サービス

SAMURAI ENGINEER Pro

未経験でも挫折しないプログラミングスクール

詳細はこちら

SAMURAI ENGINEER Plus

日本最大級のサブスク型オンラインITスクール

詳細はこちら

SAMURAI ENGINEER Freelance

「一人で稼げる」スキルを身につける

詳細はこちら