Reverse Proxy
UCIDM API や管理画面にアクセスするときに HTTPS で通信するためのリバースプロキシを設定します。プロキシサーバーには Apache を使います。
あらかじめ、お客様のドメイン向けの SSL/TLS サーバー証明書をご用意ください。
インストール
# dnf install -y httpd mod_ssl
SELinux の設定
SELinux が有効な場合はリバースプロキシの振る舞いを許可する必要があります。
SELinux が有効かどうかは次のコマンドで調べられます。
# getenforce
Enforcing # SELinux 有効
httpd_can_network_connect
を有効にします。
# setsebool -P httpd_can_network_connect on
# getsebool httpd_can_network_connect
httpd_can_network_connect --> on
SELinux を有効にした状態で通信できないときは /var/log/audit/audit.log
にログがでていないかをチェックしてください。
SELinux で許可されているポート番号一覧を調べる
特定のポート番号で通信できないときは許可されているポート番号を試してみてください。
# dnf install -y policycoreutils-python-utils
# semanage port -l | grep http
apache の設定
# cd /etc/httpd
# cp -a /opt/osstech/share/ucidm/httpd/* .
サンプルの httpd.conf を使ってお客様の環境にあわせた内容に更新します。
VirtualHost の設定
VirtualHost ディレクティブ でコンテナサービスのポート番号へプロキシする設定を行います。
- ID 連携管理画面やユーザープロファイル画面といった Web UI のプロキシ
- UCIDM API のプロキシ
また Location ディレクティブ 単位にアクセス制限の設定を行います。
Web UI のプロキシ
<VirtualHost *:443>
ServerName serverName.example.com
<Location "/ui/user">
ProxyPass http://localhost:5030/ui/user retry=10
ProxyPassReverse http://localhost:5030/ui/user
Require all granted
</Location>
<Location "/ui/admin">
ProxyPass http://localhost:5030/ui/admin retry=10
ProxyPassReverse http://localhost:5030/ui/admin
Require all granted
</Location>
<Location "/ui">
ProxyPass http://localhost:5030/ui retry=10
ProxyPassReverse http://localhost:5030/ui
Require all granted
</Location>
<Location "/sys">
ProxyPass http://localhost:3030/sys retry=10
ProxyPassReverse http://localhost:3030/sys
Require all granted
</Location>
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/ui
RewriteRule ^/$ /ui [R=301,L]
</VirtualHost>
API サーバーのプロキシ
<VirtualHost *:8443>
ServerName serverName.example.com
<Location "/">
ProxyPass http://localhost:18080/ retry=10
ProxyPassReverse http://localhost:18080/
Require all granted
</Location>
</VirtualHost>
SSL/TLS サーバー証明書の設定
動作確認テストのために sample-ca.crt, sample-server.crt, sample.key という自己証明書を使った設定をしています。お客様でご用意いただいた SSL/TLS サーバー証明書を配置してください。
# ls certs/ private/
certs/:
sample-ca.crt sample-server.crt
private/:
sample.key
VirtualHost ディレクティブで次の設定を変更します。
SSLCertificateKeyFile /etc/httpd/private/sample.key
SSLCertificateFile /etc/httpd/certs/sample-server.crt
httpd.conf の設定内容が正しいかをチェックします。
# apachectl configtest
Syntax OK
httpd サービスを起動します。
# systemctl start httpd
リバースプロキシの疎通確認
httpd の設定完了後、サービスを起動して HTTPS の疎通確認を行います。ローカルホストからの通信のみを許可しています。
$ curl --head https://localhost/sys/
HTTP/1.1 200 OK
$ curl --head https://localhost/ui/
HTTP/1.1 200 OK
$ curl https://localhost:8443/status/version
{"serverVersion":"2730fd8","idFederationClientVersion":"ef562e7","mongoDBVersion":"8.0.3","rabbitMQVersion":"4.0.3"}