2021/05/27

AWSのリバースプロキシサーバーとは?その利点や構築方法などを紹介

 
  

AWSのリバースプロキシサーバーとは?


リバーシプロキシサーバーとは、クライアントとサーバーの仲介をしつつ、それを中断したりもするサーバーのことを指します。

このサーバーはクライアントからのリクエストをWEBサーバーの代わりに受けとり、クライアントの代わりにWEBサーバーにリクエストをします。

この仕組みによって、クライアントからWEBサーバーへのアクセスができない場合でも、AWSでリバースプロキシサーバーを使えば間接的にアクセスすることが可能となります。

AWSのリバースプロキシサーバーの利点


AWSのリバースプロキシサーバーを利用すると、どのような利点があるのか解説していきます。

まず、リバースプロキシからのアクセスが可能になったことにより、負荷を分散することができます。

さらに、リバースプロキシが要求を受け取る際にはセキュリティチェックとして利用することもできます。

ほかにも、SSL通信の代わりに使えたり、アプリケーションの統合やIPアドレスの節約などになることもリバースプロキシの魅力です。

AWSのリバースプロキシサーバーの構築方法


AWSのリバースプロキシサーバーを構築するまでの流れを解説します。

AWSのリバースプロキシサーバーの使用には、AWS EC2サーバーやLINUXのコマンド、WEBサーバーの基礎知識が必要となります。

①Apacheの起動

まずは、AWS内にApacheをインストールします。

[root@ip-172-31-45-88 ~]# yum install httpd
Installed:
  httpd.x86_64 0:2.4.43-1.amzn2

Dependency Installed:
  apr.x86_64 0:1.6.3-5.amzn2.0.2                        apr-util.x86_64 0:1.6.1-5.amzn2.0.2                apr-util-bdb.x86_64 0:1.6.1-5.amzn2.0.2
  generic-logos-httpd.noarch 0:18.0.0-4.amzn2           httpd-filesystem.noarch 0:2.4.43-1.amzn2           httpd-tools.x86_64 0:2.4.43-1.amzn2
  mailcap.noarch 0:2.1.41-2.amzn2                       mod_http2.x86_64 0:1.15.3-2.amzn2

Complete!

次に、Apacheの起動ポート80番を8080番に変更します。

ファイルパス: /etc/httpd/conf/httpd.conf


# httpdが8080番ポートで待ち受け
Listen 8080

そして、Apacheを起動します。

[root@ip-172-31-45-88 ~]# systemctl start httpd
[root@ip-172-31-45-88 ~]#

状態がactiveであることを確認します。

[root@ip-172-31-45-88 ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Mon 2020-06-15 10:54:43 UTC; 6s ago
     Docs: man:httpd.service(8)
 Main PID: 708 (httpd)
   Status: "Processing requests..."
   CGroup: /system.slice/httpd.service
           tq708 /usr/sbin/httpd -DFOREGROUND
           tq709 /usr/sbin/httpd -DFOREGROUND
           tq710 /usr/sbin/httpd -DFOREGROUND
           tq711 /usr/sbin/httpd -DFOREGROUND
           tq712 /usr/sbin/httpd -DFOREGROUND
           mq713 /usr/sbin/httpd -DFOREGROUND

Jun 15 10:54:43 ip-172-31-45-88.ap-northeast-1.compute.internal systemd[1]: Starting The Apache HTTP Server...
Jun 15 10:54:43 ip-172-31-45-88.ap-northeast-1.compute.internal systemd[1]: Started The Apache HTTP Server.

8080番ポートが開いているかを確認します。

[root@ip-172-31-45-88 ~]# netstat -atn | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN

最後に、ドキュメントルートに適当なhtmlファイルを入れておきます。

②Nginxの起動

まずは、AWS内にNginxをインストールします。

[root@ip-172-31-45-88 ~]# sudo yum install nginx
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
amzn2-core                                            | 3.7 kB     00:00
No package nginx available.
Error: Nothing to do


nginx is available in Amazon Linux Extra topics "nginx1.12" and "nginx1"

To use, run
# sudo amazon-linux-extras install :topic:

Learn more at
https://aws.amazon.com/amazon-linux-2/faqs/#Amazon_Linux_Extras

エラーが出ますので、sudo amazon-linux-extras install nginx1.12を実行してください。

[root@ip-172-31-45-88 ~]# sudo amazon-linux-extras install nginx1.12
Installed:
  nginx.x86_64 1:1.12.2-2.amzn2.0.2

Dependency Installed:
  dejavu-fonts-common.noarch 0:2.33-6.amzn2                                 dejavu-sans-fonts.noarch 0:2.33-6.amzn2
  fontconfig.x86_64 0:2.13.0-4.3.amzn2                                      fontpackages-filesystem.noarch 0:1.44-8.amzn2
  gd.x86_64 0:2.0.35-26.amzn2.0.2                                           gperftools-libs.x86_64 0:2.6.1-1.amzn2
  libX11.x86_64 0:1.6.7-2.amzn2                                             libX11-common.noarch 0:1.6.7-2.amzn2
  libXau.x86_64 0:1.0.8-2.1.amzn2.0.2                                       libXpm.x86_64 0:3.5.12-1.amzn2.0.2
  libxcb.x86_64 0:1.12-1.amzn2.0.2                                          libxslt.x86_64 0:1.1.28-5.amzn2.0.2
  nginx-all-modules.noarch 1:1.12.2-2.amzn2.0.2                             nginx-filesystem.noarch 1:1.12.2-2.amzn2.0.2
  nginx-mod-http-geoip.x86_64 1:1.12.2-2.amzn2.0.2                          nginx-mod-http-image-filter.x86_64 1:1.12.2-2.amzn2.0.2
  nginx-mod-http-perl.x86_64 1:1.12.2-2.amzn2.0.2                           nginx-mod-http-xslt-filter.x86_64 1:1.12.2-2.amzn2.0.2
  nginx-mod-mail.x86_64 1:1.12.2-2.amzn2.0.2                                nginx-mod-stream.x86_64 1:1.12.2-2.amzn2.0.2

Complete!

完了したら、Complete!とでます。次に、Nginxを起動します。

[root@ip-172-31-45-88 ~]# systemctl start nginx
[root@ip-172-31-45-88 ~]#

状態がactiveであることを確認します。

[root@ip-172-31-45-88 ~]# systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: active (running) since Mon 2020-06-15 11:06:52 UTC; 45s ago
  Process: 1386 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 1383 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
  Process: 1382 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
 Main PID: 1389 (nginx)
   CGroup: /system.slice/nginx.service
           tq1389 nginx: master process /usr/sbin/nginx
           mq1391 nginx: worker process

Jun 15 11:06:52 ip-172-31-45-88.ap-northeast-1.compute.internal systemd[1]: Starting The nginx HTTP and reverse proxy server...
Jun 15 11:06:52 ip-172-31-45-88.ap-northeast-1.compute.internal nginx[1383]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Jun 15 11:06:52 ip-172-31-45-88.ap-northeast-1.compute.internal nginx[1383]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Jun 15 11:06:52 ip-172-31-45-88.ap-northeast-1.compute.internal systemd[1]: Failed to read PID from file /run/nginx.pid: Invalid argument
Jun 15 11:06:52 ip-172-31-45-88.ap-northeast-1.compute.internal systemd[1]: Started The nginx HTTP and reverse proxy server.

WEBブラウザでアクセスし、NginxのWelcomeページが表示されることを確認します。

③リバースプロキシサーバーの構築

まずは、Nginxのメイン設定ファイルを編集します。

ファイルパス: /etc/nginx/nginx.conf

この中のproxy_passというディレクティブにWEBサーバーのURLを入れます。

 server {
        location / {
            # WEBリクエストをローカルホスト8080番ポートへリダイレクト
            proxy_pass http://localhost:8080/;
        }
    }

キャッシュを有効化させるために、ディレクティブを追加します。

 http {
    # キャッシュファイルの保存場所等を定義
    proxy_cache_path /var/cache/nginx keys_zone=zone1:1m max_size=1g inactive=24h;

    # キャッシュの一時格納領域を定義
    proxy_temp_path  /var/cache/nginx_tmp;

    # オリジンから来るCache-Controlを無視する
    proxy_ignore_headers Cache-Control;

    server {
        location / {
            # キャッシュを有効化
            proxy_cache zone1;
            proxy_cache_valid 200 302 600s;

            # レスポンスヘッダにキャッシュヒットしたかどうかを含める
            add_header X-Nginx-Cache $upstream_cache_status;
        }
    }
}

最後に、Nginxを再起動します。

[root@ip-172-31-45-88 ~]# systemctl restart nginx
[root@ip-172-31-45-88 ~]#

ここまでがリバースプロキシを構築するまでの流れです。

実際にAWSのリバースプロキシサーバーを使ってみよう!


いかがだったでしょうか。

AWSのリバースプロキシサーバーを使えば、サーバーの管理やアクセスをスムーズに行うことができるようになります。

ぜひ、この記事を参考にAWSでリバースプロキシサーバーを使ってみてください。

ITエンジニアへのキャリアチェンジならキャリアチェンジアカデミー

この記事の監修者・著者

株式会社オープンアップITエンジニア
株式会社オープンアップITエンジニア
未経験からITエンジニアへのキャリアチェンジを支援するサイト「キャリアチェンジアカデミー」を運営。これまで4500人以上のITエンジニアを未経験から育成・排出してきました。
・AWS、salesforce、LPICの合計認定資格取得件数:2100以上(2023年6月時点)
・AWS Japan Certification Award 2020 ライジングスター of the Year 受賞

おすすめの動画

  • 【未経験からIT業界へ転職するなら】相談窓口とスキルの獲得はここで解決!IT転職が一気に有利に!【キャリアチェンジアカデミー】

  • 【費用一切不要】未経験からIT業界へ転職するならまずはここへ相談!【キャリアチェンジアカデミー】

  • 【何のエンジニアになれるのか?】未経験からITエンジニアを目指すとこんな道がある【キャリアチェンジアカデミー】