Strapiなどのバックエンドをインターネット上から利用できるようにするには、リバースプロキシと呼ばれるサーバーを構築する必要があります。
最近ではnginxで構築されることが多いようですが、Apacheでもモジュールを使うことでかんたんに構築することができます。
特にすでにApacheでWebサーバーを運用している場合は、サクッとリバースプロキシを導入することができますので、nginxよりもおすすめです。
当記事では、Debian(ラズパイ)に構築したApache2.4にリバースプロキシを導入する方法を紹介していきます。もちろんラズパイのみならず、通常のPCサーバーであっても同様にセットアップできますので、ご安心ください。
モジュールの有効化
Apacheでリバースプロキシを構築するには、proxyモジュールとproxy_httpモジュールを有効にする必要があります。
シンボリックリンクを使用して追加する方法もありますが、ほとんどの環境では、a2enmodコマンドにより対話的にモジュールを有効化できます。
コマンドを使ったほうがかんたんですので、ここではa2enmodコマンドを使ってモジュールを有効にしてみます。
$ sudo a2enmod
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_fcgi authnz_ldap authz_core authz_dbd authz_dbm authz_groupfile authz_host authz_owner authz_user autoindex brotli buffer cache cache_disk cache_socache cern_meta 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 http2 ident imagemap include info lbmethod_bybusyness lbmethod_byrequests lbmethod_bytraffic lbmethod_heartbeat ldap log_debug log_forensic lua macro md mime mime_magic mpm_event mpm_prefork mpm_worker negotiation php7.2 php7.3 proxy proxy_ajp proxy_balancer proxy_connect proxy_express proxy_fcgi proxy_fdpass proxy_ftp proxy_hcheck proxy_html proxy_http proxy_http2 proxy_scgi proxy_uwsgi 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)?
a2enmodコマンドを実行すると、利用できるモジュールの一覧が表示されます。proxyとproxy_httpがあることを確認し、有効にします。
Which module(s) do you want to enable (wildcards ok)?
proxy proxy_http
Enabling module proxy.
Enabling module proxy_http.
To activate the new configuration, you need to run:
systemctl restart apache2
proxyモジュールは単独では動作しません。プロトコルごとに対応するモジュールが必要となります。
例えば、HTTP通信(HTTPS通信)をリバースプロキシするには、proxy_httpモジュールも必要です。FTPもリバースプロキシしたい場合は、proxy_ftpも必要となります。
モジュールを有効にするため、Apacheの再起動を推奨されますが、ここでは再起動せずに、設定まで済ませてから再起動することにします。
リバースプロキシの設定
モジュールの有効化を行ったら、リバースプロキシの設定を行います。
ここでは例として、/apiへのアクセスをhttp://test.lc:1337に転送するようにしてみます。
Apacheの設定ファイルを開き、リバースプロキシを適用したいバーチャルホストまで移動しましょう。そして以下のように設定を追加します。
<VirtualHost *:443>
ServerName hoge.com
DocumentRoot /var/www/html
<Directory "/var/www/html">
中略
</Directory>
# リバースプロキシの設定
ProxyRequests Off
ProxyPass /api http://test.lc:1337
ProxyPassReverse /api http://test.lc:1337
</VirtualHost>
設定内容について解説します。
- ProxyRequestsは、フォワードプロキシを使用するかどうかを示すものです。リバースプロキシではOffにしておきます。不用意にONにすると、外部から踏み台にされる可能性があり、危険です。注意しましょう。
- ProxyPassとProxyPassReverseにプロキシしたいパスとプロキシ先のアドレスを指定しておきます。基本的にはどちらも同じ内容を設定しておけばOKです。
- ProxyPassReverseを指定することにより、ヘッダーの情報も自動的に変換してくれるので、リダイレクトなどが発生したときでもエラーとなることを防いでくれます。
基本的に上記3行を追加するだけで、リバースプロキシを構築することができます。とてもかんたんです。
最後にApacheを再起動しましょう。
$sudo systemctl restart apache2
実際にアクセスできるか確認してみてください。
まとめ
いかがでしたか?意外とかんたんに設定できましたよね。
最近はDockerなどでサービスごとにWebサーバー(ポート)を立てるという方式が流行っており、リバースプロキシもなくてはならない存在となっています。
多くの場合はnginxで構築されるリバースプロキシですが、すでにApacheを使っている環境であれば、モジュールを追加することで、かんたんにリバースプロキシを導入することができます。
ぜひお試しください。
Apacheで構築したリバースプロキシにIPアドレスやBASIC認証によるアクセス制限をかける方法については、こちらの記事をご覧ください。
コメント