Title: Apache を使って TeamPage を HTTPS で運用する

TeamPage サーバー自身に HTTPS を設定する代わりに、Apache を HTTPS リバース プロキシ サーバーとして前段に配置することで、TeamPage を HTTPS で利用できます。

この構成には次のような利点があります。



ここでは同じコンピュータに Apache と TeamPage の両方をインストールして設定する例を紹介しますが、別々のコンピューターにインストールしてネットワーク接続することも可能です。



イメージ図



下図は、ユーザーが利用するコンピュータ(クライアント コンピュータ)、Apache によるプロキシサーバー、TeamPage サーバーの接続例です。

Apache は HTTPS で稼働しているので、クライアント コンピュータと Apache との間の通信は暗号化されます。Apache と TeamPage の間は暗号化されない HTTP 通信になります。

Apacheをフロントエンドに設置

使用環境



ここでは、Windows Server 2022 環境で次のバージョンを使用します。



TeamPage を運用するコンピューターの名前は「winvm.local」です。

OpenSSL と Apache を同じ「winvm.local」にインストールします。

TeamPage は 8080 番ポート、Apache は 80 番ポートと 443 番ポートを使用することとします。

OpenSSL インストール



ダウンロード



OpenSSL のダウンロードページ から OpenSSL のインストーラーをダウンロードし、インストールします。

ここでは Win64 OpenSSL v3.4.1 Light を選択し、インストールしました。



パスの設定



OpenSSL をインストールしただけでは、インストール先フォルダにパスが通っていないため、openssl.exe を実行するにはフルパスでの指定が必要です。これでは面倒なので、次の手順でパスの設定を変更します。

Windows のスタートメニューの「ファイル名を指定して実行」に「SystemPropertiesAdvanced」と入力し、「システムのプロパティ」を開き、「環境変数」をクリックします。



「Path」の項目をダブルクリックして「環境変数名の編集」ダイアログを開き、「新規」をクリックして OpenSSL がインストールされたフォルダのサブフォルダ「bin」を指定します。(デフォルトで C:\Program Files\OpenSSL-Win64\bin です。)



設定ダイアログの「OK」をクリックしてすべて閉じます。

これで OpenSSL の実行ファイルへのパスが通りました。

Apache インストール



ダウンロード



https://www.apachelounge.com/download/ から Windows 版 Apache をダウンロードします。

今回は 64bit 版 Windows 用の 2.4.63 を選択しました。

Download Apache

インストール



ダウンロードした httpd-2.4.63-250207-win64-VS17.zip を展開し、中にある「Apache24」フォルダを適当なフォルダに設置します。

ここでは C: ドライブのルート フォルダに設置しました。(C:\Apache24 フォルダになります)



基本設定



conf フォルダの中にある httpd.conf をテキストエディタで編集します。

サーバー名



次の行のコメントアウトを解除(行頭のシャープ記号を削除)し、サーバー名を設定します。(ここでは「winvm.local」と名付けました。)

ServerName winvm.local


モジュール



次の行のコメントアウトを解除してモジュールを有効化します。

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule headers_module modules/mod_headers.so


起動テスト



管理者モードのコマンドプロンプトを起動し、「C:\Apache24\bin」に移動し、「httpd」と入力して Enter キーを押すと Apache サーバーが起動します。画面は、下図のように「httpd」で止まったような状態になりますが、Apache は動作し続けています。(終了するには Ctrl + C キーを押します)



ブラウザーで http://winvm.local/ にアクセスします。この段階では HTTPS の設定は行われていませんので、HTTP でアクセスします。

下図のように「It works!」が表示されれば成功です。これは Apache の初期画面で、Apache が動作していることを意味しています。



秘密鍵などの作成・設置



HTTPS に必要な秘密鍵などを作成します。

秘密鍵などのファイルはどこに設置しても構いませんが、ここでは C:\Apache24\conf\ssl にします。

管理者モードでコマンドプロンプトを起動し、C:\Apache24\conf に移動し、サブフォルダ「ssl」を作成し、そのサブフォルダに移動します。

秘密鍵を作成 (server.key)



openssl genrsa -out server.key 2048


設定ファイルを作成 (san.cnf)



OpenSSL はデフォルトで SAN を使わないため、SAN を指定する設定ファイルを作ります。

san.cnf を作成し、次の内容を記述してください。



[ req ]
default_bits       = 2048
distinguished_name = req_distinguished_name
req_extensions     = req_ext
prompt             = no

[ req_distinguished_name ]
C  = JP
ST = Tokyo
L  = Chiyoda
O  = My Company
CN = winvm.local

[ req_ext ]
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = winvm.local



CSR(Certificate Signing Request)を作成 (server.csr)



openssl req -new -key server.key -out server.csr -config san.cnf


自己署名証明書を生成 (server.crt)



openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt -extensions req_ext -extfile san.cnf


確認



C:\Apache24\conf\ssl に server.key, server.csr, server.crt が作成されたことを確認します。

PS C:\Apache24\conf\ssl> dir


    ディレクトリ: C:\Apache24\conf\ssl


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2025/03/26     16:42            291 san.cnf
-a----        2025/03/26     16:44           1150 server.crt
-a----        2025/03/26     16:43            910 server.csr
-a----        2025/03/26     16:42           1732 server.key


TeamPage 側の設定



Apache がリバース プロキシとして前段に立つため、TeamPage 側の設定も変更します。

TeamPage の管理画面から、サーバー設定 → ネットワーク → HTTP サーバー を開き、次のように設定します。

項目 設定値

セキュリティ レベル なし

ポート 8080

サーバー名 winvm.local

設定後、TeamPage サーバーを再起動します。

ここで戸惑いやすいのが、「セキュリティ レベル」が「なし」なのに「サーバー名」が https:// で始まる点です。

この構成では、暗号化は Apache が担当します。Apache と TeamPage は同じコンピューター内で通信するため、その間は暗号化する必要がありません。したがって TeamPage 自身は HTTP(セキュリティ レベル「なし」)で動作します。

一方「サーバー名」は、TeamPage が記事へのリンクやメールの本文などに URL を書き出すときに使う値です。ユーザーが実際にアクセスするのは Apache の https://winvm.local なので、こちらは HTTPS で指定します。

この設定を誤って http://winvm.local にすると、ログイン後のリダイレクト先が HTTP になり、Apache の 80 番から 443 番へのリダイレクトとの間でループが発生したり、ログインできなくなったりします。

補足: 同じ画面にある「完全修飾 URL にホスト ヘッダーではなく常にサーバー ベース URL を使用する」を「はい」にしておくと、TeamPage が生成する URL が常に上記のサーバー名に基づくようになります。リバース プロキシ構成では、この設定を有効にすることをお勧めします。

Apache HTTPSおよびプロキシの設定



httpd.conf の編集



httpd.conf の最後に次の内容を追記します。

Listen 443
<VirtualHost *:443>
    ServerName winvm.local
    SSLEngine on
    SSLCertificateFile "c:/Apache24/conf/ssl/server.crt"
    SSLCertificateKeyFile "c:/Apache24/conf/ssl/server.key"
    ErrorDocument 503 /error/503.html
    ProxyPreserveHost On
    RequestHeader set X-Forwarded-Proto "https"
    RequestHeader set X-Forwarded-Port "443"
    ProxyRequests Off
    ProxyErrorOverride Off
    ProxyPass /error/ !
    ProxyPass /ws ws://localhost:8080/ws
    ProxyPassReverse /ws ws://localhost:8080/ws
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
</VirtualHost>

<VirtualHost *:80>
    ServerName winvm.local
    Redirect permanent / https://winvm.local/
</VirtualHost>


ProxyErrorOverride について

この設定は、TeamPage が返したエラー応答を Apache 側のエラーページに差し替えるかどうかを制御します。

Off を指定してください。 On にすると、TeamPage が返す認証要求(HTTP 401)まで Apache が差し替えてしまい、Claude 連携(MCP)などの認証が必要な機能が動作しなくなります。

なお Off にしても、下記「メンテナンス中のお知らせ表示」の 503 画面は正常に動作します。TeamPage が停止しているときの 503 は Apache 自身が生成するものであり、この設定の対象外だからです。

動作テスト



Apache を再起動します。

ブラウザーで https://winvm.local/ にアクセスします。

この段階では、ブラウザーは HTTPS に使われている証明書を信頼していませんので、下図のようなセキュリティ警告が表示されます。(下図は Microsoft Edge です)

「詳細を表示」をクリックし、「winvm.local に進む(安全ではありません)」をクリックします。



TeamPage の画面が表示されることを確認します。



リダイレクトの確認



TeamPage が正しく HTTPS の URL を生成しているかを確認します。ブラウザーではキャッシュやリダイレクトの自動追跡で分かりにくいため、コマンドで確認します。

PowerShell を起動して、次のコマンドを実行します。

curl.exe -k -i https://winvm.local/traction


次のような応答が返ります。

HTTP/1.1 302 Found
Server: Apache/2.4.63 (Win64) OpenSSL/3.4.1
Location: https://winvm.local/traction?type=home&handler=auth&...


Location: の値が https:// で始まっていれば成功です。

ここが http:// になっている場合は、TeamPage の「サーバー名」の設定を確認してください。上記「TeamPage の設定」で https://winvm.local を指定する必要があります。

80 番ポートのリダイレクト確認



curl.exe -i http://winvm.local/


301 Moved Permanently が返り、Location: が https://winvm.local/ になっていれば、HTTP から HTTPS への転送が正しく動作しています。

クライアント側で証明書をインストール



ブラウザーのセキュリティ警告を回避するには、ユーザーにサーバー証明書(server.crt)を配布し、Windowsにインストールしてもらいます。

ここからは各ユーザー側の操作になります。

管理者から配布された server.crt をダブルクリックします。



「証明書のインストール」をクリックします。



証明書のインポート ウィザードが開始されます。

「保存場所」で「ローカルコンピューター」を選択して、「次へ」をクリックします。



「証明書をすべて次のストアに配置する」を選択し、「参照」ボタンから「信頼されたルート証明機関」を選択し、「次へ」をクリックします。



信頼されたルート証明機関にインストールされたことを確認し、「完了」をクリックします。



確認ダイアログが表示されるので、「はい」を選択します。



サーバー署名書のインポートが完了しました。



ブラウザーを再起動して https://winvm.local/ に再アクセスし、セキュリティ警告が表示されないことを確認します。



関連記事



FAQ2774: Apache を使って TeamPage をリバース プロキシ構成で運用する (HTTP)



Attachments:
img01.png
img02.png
img03.png
img04.png
img05.png
img06.png
img07.png
img09.png
img10.png
img11.png
img12.png
img13.png
img14.png
img15.png
img16.png
img17.png
img18.png
apache_image.jpg
関連記事
Article: FAQ309 (permalink)
Categories: :FAQ:HTTPS, :DocJp:FAQ, :FAQ:セキュリティ, :FAQ:暗号化, :FAQ:Apache, :FAQ:Proxy, :FAQ:プロキシ, :FAQ:運用保守
Date: 2010/01/12; 17時14分35秒 JST

Author Name: TeamPage サポート
Author ID: jpbo