EJPスタッフブログ

ソフトウェアやボードゲームの開発を行うEJP株式会社のスタッフブログです。

Red Hat Enterprise Linux で Apache Proxy の設定

f:id:earleyjp:20200204132751j:plain


今まで Linux は無料のディストリビューションばかり使ってましたが、Red Hat を使うことがあったのでメモとして。

(非常に基本的な手順の流れになっています)

 

Red Hat Enterprise Linux 構築

Red Hat Enterprise Linux(以下、RHEL) は30日間無料の評価版があります。

テストなどで使用する場合は取り急ぎ評価版で環境構築します。

 

OSイメージをダウンロードするにはアカウント作成が必要です。

以下からRed Hatのアカウントを作成しましょう。

access.redhat.com

 

カスタマーポータル画面にて対象の製品を探します。

今回はRHELなので、

「製品およびサービス」>「Red Hat Enterprise Linux」を選択します。

f:id:earleyjp:20200204133644p:plain

また、今回は最新版ではなく、7.2が必要だったので、「RHEL 7 以前のバージョンをダウンロード」から過去のバージョンをダウンロードしていきます。

f:id:earleyjp:20200204133802p:plain

遷移したページにバージョンなどを指定できるセレクトボックスがあります。

対象のものを選択しましょう。

OSイメージは「binary」がついているものをダウンロードしましょう。サイズは4GB程度になっているはずです。

「boot」がついているファイルはBootだけするイメージです。

ネットワークなどから環境構築する場合に利用するものです。

f:id:earleyjp:20200204134018p:plain

ダウンロードしたOSイメージを利用して、今回はVMware Fusion上に簡易インストールで構築しました。

 

Apache のインストール

今回はApacheでプロキシを設定したいと思います。

以下で紹介するコマンドは一般ユーザ、管理者ユーザをプロンプトで表現します。

先頭に記載されたプロンプトが「$」ならば一般「#」ならば管理者(root)ユーザとなります。

 

まずはApacheを確認します。

以下のコマンドで httpd がインストールされているか確認します。

$ rpm -q httpd

日本語環境では「パッケージ httpd はインストールされていません。」と表示される場合、インストールが必要です。以下のコマンドでインストールしましょう。

この時「root」ユーザーで実行する必要があります。

# yum install httpd

すると以下のメッセージが表示されました。

Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager

This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.

There are no enabled repos.

 Run "yum repolist all" to see the repos you have.

 You can enable repos with yum-config-manager --enable <repo>

どうやらサブスクリプション登録しないとリポジトリが使えないようです。

RHELを初めて使ったのでスムーズにyumが使えないのはちょっと困りました。

それでは指示に従って「subscription-manager」を起動してみます。

# subscription-manager

オプションなしでコマンドを実行するとコマンドの使い方に関するヘルプが表示されるようです。

登録を行う場合、以下のコマンドを実行する必要があります。

# subscription-manager register --username=yourusername --password=yourpassword

username/passwordはRedHadに登録したアカウントですね。

usernameはメールアドレスではなく設定したユーザIDなので注意が必要です。

 

これでyumが利用できるので再度以下のコマンド投入です。

# yum install httpd

 

Proxy の設定

念のため、バージョンを確認しておきましょう。

OSのバージョンは以下で、

$ cat /etc/redhat-release

Red Hat Enterprise Linux Server release 7.2 (Maipo)

 

Apacheのバージョンは以下で、

$ httpd -V

Server version: Apache/2.4.6 (Red Hat Enterprise Linux)

 

proxy関連モジュールの確認

$ httpd -M | grep proxy

 

 proxy_module (shared)

 proxy_ajp_module (shared)

 proxy_balancer_module (shared)

 proxy_connect_module (shared)

 proxy_express_module (shared)

 proxy_fcgi_module (shared)

 proxy_fdpass_module (shared)

 proxy_ftp_module (shared)

 proxy_http_module (shared)

 proxy_scgi_module (shared)

 proxy_wstunnel_module (shared)

 

それでは

/etc/httpd/conf/httpd.conf

に以下を追加していきます。

# ProxyPass /app/ http://192.168.100.1:8080

今回は、 Apache へのリクエストを192.168.100.1に転送していきます。

Apacheのサービス起動は以下のコマンドです。

# systemctl start httpd.service

自動起動を設定する場合は以下のコマンドも投入します。

# systemctl enable httpd.service

 

ファイアウォール設定

これだけでは、別ホストからアクセスした時にhttpリクエストがサーバに到達しません。

まずはファイアウォールを解除します。

# firewall-cmd --add-service=http --zone=public --permanent

 firewall-cmd で firewalld の設定を制御します。

「add-service」でhttpを追加します。これはデフォルトでhttpが定義されており、ポート80が割り当てられています。

また、firewalld は「zone」という単位で区切られており、デフォルトで「public」が使用されています。

特に設定変更していない場合はzoneの「public」にserviceの「http」を追加し永続化「permanent」します。

 

これで疎通するはずなのですが、なぜか503に...

 

どうやらSELinuxの設定によりhttpdが外部にアクセスできないようです。

そのため、以下のコマンドで設定します。

# /usr/sbin/setsebool -P httpd_can_network_connect 1

 これでひとまず Apache へのアクセスを指定したホストへ接続するように設定できました。