Mod proxy拡張機能を使用してリバースプロキシとしてApacheHTTPサーバーを使用する方法
序章
Apacheは、非常に広範囲の強力な拡張機能にアクセスできる、実証済みのHTTPサーバーです。 リバースプロキシを実行するという点では頼りになる選択ではないように思われるかもしれませんが、利用可能な豊富な機能セットをすでにApacheに依存しているシステム管理者は、アプリケーションサーバーへのゲートウェイとしてApacheを使用することもできます。 ほとんどの場合、これは、サーバーセットアップから追加のレイヤーを削除するか、接続をリダイレクトするためだけにさらに別のツールを使用する必要があることを意味します。
このDigitalOceanの記事では、Ubuntu 13でApacheをセットアップし、それをリバースプロキシとして使用して、着信接続を歓迎し、同じネットワーク上で実行されているアプリケーションサーバーにリダイレクトします。 この目的のために、mod_proxy拡張機能と他のいくつかの関連するApacheモジュールを使用して操作します。
用語集
1. Apache
2. mod_proxyを使用してリバースプロキシとして機能するApache
3. Apacheとmod_proxyのインストール
- オペレーティングシステムの更新
- エッセンシャルビルドツールの入手
- モジュールと依存関係の取得
4. Apacheからプロキシへの接続の構成
- モジュールのアクティブ化
- デフォルト構成の変更
- ロードバランシングの有効化
- SSLサポートの有効化
- Apacheを再起動します
Apache
Apache HTTPサーバーは、おそらく存在する中で最も有名で人気のあるWebサーバーであるため、紹介する必要はありません。 多くの異なるプラットフォームとセットアップでApacheを非常に簡単に実行することが可能です。 このアプリケーションには、さまざまな種類のタスク(ルールベースのURL書き換え用のmod_rewrite)を処理するためのサードパーティモジュールが多数付属しています。そのうちの1つは、現在は比較的無視されていますが、 mod_proxy :を実装するApacheモジュールです。バックエンドで実行されているサーバーのプロキシ(またはゲートウェイ)。
ヒント:いくつかの記事によると、Apacheの名前は、サーバーの「パッチの多い」性質に由来しています。 これは、アプリケーションパッチ(またはモジュール)のコレクションです。
注: Apacheの詳細については、このテーマに関するWikipediaのエントリ Apache HTTPServerを確認してください。
mod_proxyを使用してリバースプロキシとして機能するApache
mod_proxyは、接続をリダイレクトするためのApacheモジュールです(つまり、 ゲートウェイ、それらを通過させます)。 他のモジュールと同じように使用できるようになっており、構成は他のモジュールと同様に非常に基本的(または標準)です。 mod_proxyは、単一のモジュールではなく、それらのコレクションであり、それぞれが新しい機能のセットをもたらします。
これらのモジュールの一部は次のとおりです。
- mod_proxy:接続を管理してリダイレクトするApacheのメインプロキシモジュール。
- mod_proxy_http:このモジュールは、HTTPおよびHTTPSプロトコルのプロキシ機能を実装します。
- mod_proxy_ftp:このモジュールは同じことを行いますが、FTPプロトコル用です。
- mod_proxy_connect:これはSSLトンネリングに使用されます。
- mod_proxy_ajp:AJPプロトコルの操作に使用されます。
- mod_proxy_wstunnel: Webソケットの操作に使用されます(つまり、 WSおよびWSS)。
- mod_proxy_balancer:クラスタリングと負荷分散に使用されます。
- mod_cache:キャッシュに使用されます。
- mod_headers:HTTPヘッダーの管理に使用されます。
- mod_deflate:圧縮に使用されます。
注: Apacheとmod_proxyの詳細については、こちらに関するApacheの公式ドキュメントをご覧ください。
Apacheとmod_proxyのインストール
注:ここに記載されている手順は簡潔にしています。Apacheがすでにインストールされているか、使用方法を知っている可能性があるためです。 それでも、以下の手順に従うことで、Apacheを実行する新しいUbuntuVPSを数分で入手できます。
オペレーティングシステムの更新
まず、仮想サーバーの準備から始めます。 まず、デフォルトで使用可能なコンポーネントをアップグレードして、すべてが最新であることを確認します。
ソフトウェアソースリストを更新し、古いアプリケーションをアップグレードします。
aptitude update aptitude -y upgrade
エッセンシャルビルドツールの入手
アプリケーション構築に不可欠なパッケージであるbuild-essentialの入手を続けましょう。 このパッケージには、ソースから特定のものをインストールするために必要なツールが含まれています。
次のコマンドを実行して、build-essential
パッケージをインストールします。
aptitude install -y build-essential
モジュールと依存関係の取得
次に、モジュールと依存関係を取得します。
次のコマンドを実行してインストールします。
aptitude install -y libapache2-mod-proxy-html libxml2-dev
Apacheからプロキシへの接続の構成
モジュールのアクティブ化
Apacheを構成する前に、このチュートリアルで使用する、または将来役立つ可能性のある必要なモジュールを有効にします。
まず、すべてのモジュールが正しくインストールされ、アクティブ化する準備ができていることを確認しましょう。
次のコマンドを実行して、使用可能なApacheモジュールのリストを取得します。
a2enmod # You will be presented with an output similar to: # Your choices are: access_compat actions alias allowmethods asis auth_basic auth_digest auth_form authn_anon authn_core authn_dbd authn_dbm authn_file authn_socache authnz_ldap authz_core authz_dbd authz_dbm authz_groupfile authz_host authz_owner authz_user autoindex buffer cache cache_disk cache_socache cgi cgid charset_lite data dav dav_fs dav_lock dbd deflate dialup dir dump_io echo env expires ext_filter file_cache filter headers heartbeat heartmonitor include info lbmethod_bybusyness lbmethod_byrequests lbmethod_bytraffic lbmethod_heartbeat ldap log_debug log_forensic lua macro mime mime_magic mpm_event mpm_itk mpm_prefork mpm_worker negotiation proxy proxy_ajp proxy_balancer proxy_connect proxy_express proxy_fcgi proxy_fdpass proxy_ftp proxy_html proxy_http proxy_scgi proxy_wstunnel ratelimit reflector remoteip reqtimeout request rewrite sed session session_cookie session_crypto session_dbd setenvif slotmem_plain slotmem_shm socache_dbm socache_memcache socache_shmcb speling ssl status substitute suexec unique_id userdir usertrack vhost_alias xml2enc # Which module(s) do you want to enable (wildcards ok)?
必要なモジュールの選択を求められたら、モジュール名をリストした以下の行を渡すことができます。
モジュールのリスト:
proxy proxy_ajp proxy_http rewrite deflate headers proxy_balancer proxy_connect proxy_html
または、次のコマンドを実行して、モジュールを1つずつ有効にすることもできます。
a2enmod proxy a2enmod proxy_http a2enmod proxy_ajp a2enmod rewrite a2enmod deflate a2enmod headers a2enmod proxy_balancer a2enmod proxy_connect a2enmod proxy_html
注:一部のモジュールはデフォルトで有効になっている可能性があります。 それらを2回有効にしようとすると、それらがアクティブであることを確認できます。
デフォルト構成の変更
このステップでは、/etc/apache2/sites-enabled
内のデフォルトの構成ファイル000-default.conf
を変更して、「プロキシ」機能を設定する方法を説明します。
次のコマンドを実行して、nanoテキストエディタを使用してデフォルトのApache仮想ホストを編集します。
nano /etc/apache2/sites-enabled/000-default.conf
ここでは、mod_virtualhost
とmod_proxy
を併用してプロキシ仮想ホストを定義します。
以下の構成ブロックをコピーして貼り付け、ニーズに合わせて修正します。
<VirtualHost *:*> ProxyPreserveHost On # Servers to proxy the connection, or; # List of application servers: # Usage: # ProxyPass / http://[IP Addr.]:[port]/ # ProxyPassReverse / http://[IP Addr.]:[port]/ # Example: ProxyPass / http://0.0.0.0:8080/ ProxyPassReverse / http://0.0.0.0:8080/ ServerName localhost </VirtualHost>
CTRL + Xを押し、Yで確定して保存して終了します。
注:仮想ホスト構成の詳細については、こちらをクリックして、このテーマに関する詳細なApacheマニュアルを確認できます。
ロードバランシングの有効化
複数のバックエンドサーバーがある場合、それらをプロキシするときに接続を分散する良い方法は、Apacheの負荷分散機能を使用することです。
前の手順と同様に仮想ホスト設定の編集を開始しますが、今回は以下の構成例を使用します。
<Proxy balancer://mycluster> # Define back-end servers: # Server 1 BalancerMember http://0.0.0.0:8080/ # Server 2 BalancerMember http://0.0.0.0:8081/ </Proxy> <VirtualHost *:*> # Apply VH settings as desired # However, configure ProxyPass argument to # use "mycluster" to balance the load ProxyPass / balancer://mycluster </VirtualHost>
SSLリバースプロキシサポートの有効化
SSL接続と証明書を扱っている場合は、以下の設定でセカンダリ仮想ホストも有効にする必要があります。
前の手順の手順を繰り返しますが、次の構成オプションを使用します。
Listen 443 NameVirtualHost *:443 <VirtualHost *:443> SSLEngine On # Set the path to SSL certificate # Usage: SSLCertificateFile /path/to/cert.pem SSLCertificateFile /etc/apache2/ssl/file.pem # Servers to proxy the connection, or; # List of application servers: # Usage: # ProxyPass / http://[IP Addr.]:[port]/ # ProxyPassReverse / http://[IP Addr.]:[port]/ # Example: ProxyPass / http://0.0.0.0:8080/ ProxyPassReverse / http://0.0.0.0:8080/ # Or, balance the load: # ProxyPass / balancer://balancer_cluster_name </VirtualHost>
Apacheを再起動します
構成に問題がなければ、変更を有効にするためにクラウドサーバーを再起動する必要があります。
次のコマンドを実行して、Apacheを再起動します。
service apache2 restart
以上です!
これでVPSにアクセスでき、Apacheはバックエンドアプリケーションサーバーへの接続をリバースプロキシします。