🍣

ApacheサーバをリバースプロキシにしてRailsアプリと連携させる

に公開

はじめに

無事にEC2(Rails)とRDS(PostgreSQL)でアプリケーションをAWSにデプロイできました。

作業記録の記事はこちら。
railsアプリをEC2とRDS(PostgreSQL)でデプロイする

本記事ではEC2インスタンスでApacheサーバーを用意し、railsアプリと連携させる事をゴールとしています。

作業概要

  • リバースプロキシ用のEC2インスタンスを作成
  • 「Apache HTTP Server」と「mod_proxy」をインストール
  • mod_proxy を使ってリバースプロキシ設定

1.インスタンスの起動とパッケージのインストール

Apacheサーバー(EC2)を以下の構成で起動

  • 名前:web_server
  • OSイメージ:AmazonLinux
  • AMI:AmazozLinux2023 AMI 64ビット(x86)
  • インスタンスタイプ:t2.micro
  • キーペア:新規に作成
  • ネットワーク(アプリケーションと同じvpc)
  • サブネット:public1-ap-northeast-1a
  • パブリックIPの自動割り当て:有効化(インターネットから接続可能にする)
  • セキュリティグループ
    • セキュリティグループ名:apache_security_group
    • インバウンドグループ(構築中は自PCからの接続のみ許可する)
      • タイプ:すべてのトラフィック
      • ソース:マイIP
  • ストレージ:30GB(gp3)

インスタンス起動後、Apacheをインストールし起動する。

% sudo dnf install httpd -y
% sudo systemctl start httpd
% sudo systemctl enable httpd

続いてmod_proxy_htmlをインストール。
mod_proxy_htmlはApache2.4より新しくApache標準のモジュール。リバースプロキシとしてApacheを構築する際にproxy先サーバーからの応答コンテンツのURLを変換するために使用するもの。

% sudo dnf install mod_proxy_html -y

2.mod_proxy_htmlの設定

railsアプリにapacheサーバーから接続を行うため、「/etc/httpd/conf.d」にrails.confという設定ファイルを作成する。
※Apacheは/etc/httpd/conf.d配下の「.conf拡張子」ファイルを設定ファイルとして認識してくれる。

rails.conf
<VirtualHost *:80>
    ProxyPreserveHost On
    ProxyPass / http://<ApacheサーバーのIPアドレス>:3000/
    ProxyPassReverse / http://<ApacheサーバーのIPアドレス>:3000/

    ErrorLog /var/log/httpd/rails_error.log
    CustomLog /var/log/httpd/rails_access.log combined
</VirtualHost>

3.railsアプリの起動

railsアプリを起動する。

% RAILS_ENV=production bundle exec rails s -b 0.0.0.0
=> Booting Puma
=> Rails 8.0.2 application starting in production 
=> Run `bin/rails server --help` for more startup options
Puma starting in single mode...
* Puma version: 6.6.0 ("Return to Forever")
* Ruby version: ruby 3.4.4 (2025-05-14 revision a38531fd3f) +PRISM [x86_64-linux]
*  Min threads: 3
*  Max threads: 3
*  Environment: production
*          PID: 13608
* Listening on http://0.0.0.0:3000
Use Ctrl-C to stop

4.Apacheサーバーにアクセス(リバースプロキシ)

ブラウザで<apacheサーバーのIPアドレス>/tasksにアクセスする。
(※railsアプリのEC2インスタンスのセキュリティグループはテストのため一時的に全解放してあります)

無事にApaceサーバー経由で表示された。

さいごに

リバースプロキシを使用してアプリに接続する事ができました。しかし、現在Apacheサーバーとrailsサーバーともにパブリックサブネットに配置してあります。その為、セキュリティの観点からはrailsサーバーはプライベートサブネットに配置する必要があります。また、適切なセキュリティグループも設定してあげる必要があります。
次回の記事でその作業を記載していこうと思います。

Discussion