LoginSignup
6
8

More than 3 years have passed since last update.

Ubuntu 19.10 Eoan Ermine の Apache 2.4 でリバースプロキシする

Posted at

概要

  • Ubuntu に apache2 パッケージをインストール
  • a2enmod コマンドで mod_proxy と mod_http を有効化
  • https へリバースプロキシする場合は a2enmod コマンドで mod_ssl を有効化

Apache をインストール

apache2 パッケージをインストール。

$ sudo apt install apache2

バージョンを確認。

$ /usr/sbin/apachectl -v
Server version: Apache/2.4.41 (Unix)
Server built:   Nov  9 2019 07:53:54

mod_proxy と mod_proxy_http を有効化

http サイトにリバースプロキシするために必要なモジュールを有効化する。

a2enmod コマンドで Apache モジュールを有効にする。
a2enmod コマンドに proxy_http を指定すると mod_proxy_http と依存関係にある mod_proxy が有効になる。

$ sudo a2enmod proxy_http
Considering dependency proxy for proxy_http:
Enabling module proxy.
Enabling module proxy_http.
To activate the new configuration, you need to run:
  systemctl restart apache2

有効になった Apache モジュールは /etc/apache2/mods-enabled/ に設置される。

$ ls -la /etc/apache2/mods-enabled/ | grep proxy
lrwxrwxrwx 1 root root   28  1月 27 12:37 proxy.conf -> ../mods-available/proxy.conf
lrwxrwxrwx 1 root root   28  1月 27 12:37 proxy.load -> ../mods-available/proxy.load
lrwxrwxrwx 1 root root   33  1月 27 12:48 proxy_http.load -> ../mods-available/proxy_http.load

mod_proxy - Apache HTTP サーバ バージョン 2.4

このモジュールは Apache のプロキシ/ゲートウェイ機能を実装しています。 AJP13 (Apache JServe Protocol version 1.3), FTP, CONNECT (SSL 用), HTTP/0.9, HTTP/1.0, HTTP/1.1 のプロキシ機能を実装しています。これらのプロトコルやその他のプロトコル用の プロキシ機能を持った、他のモジュールに接続するようにも設定できます。

Apache のプロキシ機能は mod_proxy の他に、 いくつかのモジュールに分割されています: mod_proxy_http, mod_proxy_ftp, mod_proxy_ajp, mod_proxy_balancer, mod_proxy_connect です。ですから、 特定のプロキシの機能を使いたい場合は、mod_proxy と 該当するモジュールをサーバに (コンパイル時に静的に行なうか LoadModule で動的に読み込むかして) 組み込む必要があります。

https サーバへリバースプロキシする場合は mod_ssl も有効化

a2enmod ssl で mod_ssl が有効になり、依存関係で mod_setenvif と mod_mime と mod_socache_shmcb も有効になる。

$ sudo a2enmod ssl
Considering dependency setenvif for ssl:
Module setenvif already enabled
Considering dependency mime for ssl:
Module mime already enabled
Considering dependency socache_shmcb for ssl:
Enabling module socache_shmcb.
Enabling module ssl.
See /usr/share/doc/apache2/README.Debian.gz on how to configure SSL and create self-signed certificates.
To activate the new configuration, you need to run:
  systemctl restart apache2

設定ファイルを設置

今回は /etc/apache2/sites-available ディレクトリにある 000-default.conf ファイルをコピーして my-proxy.conf というファイルを作成する。

$ sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/my-proxy.conf

my-proxy.conf ファイルの中身を修正する。

$ sudo vim /etc/apache2/sites-available/my-proxy.conf

my-proxy.conf ファイルを以下の内容に置き換える。

my-proxy.conf
<VirtualHost *:80>

  # /etc/apache2/sites-available/000-default.conf からコピーした内容
  ServerAdmin webmaster@localhost
  DocumentRoot /var/www/html
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined

  # localhost:8888 へリバースプロキシする
  ProxyPass /foo/ http://127.0.0.1:8888/foo/
  ProxyPassReverse /foo/ http://127.0.0.1:8888/foo/

  # http サイトへリバースプロキシする
  ProxyPass /bar/ http://example.com/bar/
  ProxyPassReverse /bar/ http://example.com/bar/

  # https サイトへリバースプロキシする
  SSLProxyEngine On
  ProxyPass /baz/ https://example.org/baz/
  ProxyPassReverse /baz/ https://example.org/baz/

</VirtualHost>

my-proxy.conf を有効化して 000-default.conf を無効化

a2ensite コマンドで my-proxy.conf を有効にする。

$ sudo a2ensite my-proxy
Enabling site my-proxy.
To activate the new configuration, you need to run:
  systemctl reload apache2

a2dissite コマンドで 000-default.conf を無効にする。

$ sudo a2dissite 000-default
Site 000-default disabled.
To activate the new configuration, you need to run:
  systemctl reload apache2

Apache を再起動して設定を反映する

$ sudo systemctl restart apache2

curl コマンド等でリバースプロキシが動作しているのを確認できる。

$ curl -i http://localhost/foo/
HTTP/1.1 200 
Date: Mon, 27 Jan 2020 11:19:56 GMT
Server: Apache/2.4.41 (Ubuntu)
Content-Type: text/html;charset=UTF-8
Content-Language: ja-JP
Vary: Accept-Encoding
Transfer-Encoding: chunked

<html><body>Hello, world.</body></html>

エラーについて

思ったように動作しない場合は /var/log/apache2/error.log に出力されるエラーメッセージを調べると良い。

mod_proxy だけ導入して mod_proxy_http を導入していない場合のエラー

AH01144: No protocol handler was valid for the URL /foo/ (scheme 'http'). If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.

mod_ssl を導入していない場合のエラー

AH01961: SSL Proxy requested for your.example.net:80 but not enabled [Hint: SSLProxyEngine]
AH00961: HTTPS: failed to enable ssl support for XXX.XXX.XXX.XXX:443 (example.org)

参考資料

6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8