Title: Apache を使って TeamPage を HTTPS で運用する
TeamPage サーバー自身に HTTPS を設定する代わりに、Apache を HTTPS リバース プロキシ サーバーとして前段に配置することで、TeamPage を HTTPS で利用できます。
この構成には次のような利点があります。
- TeamPage Free のライセンスでは TLS/SSL 暗号化通信 (HTTPS) を利用できませんが、この方法であれば HTTPS で運用できます
- 証明書の更新を Apache 側だけで完結できる
ここでは同じコンピュータに Apache と TeamPage の両方をインストールして設定する例を紹介しますが、別々のコンピューターにインストールしてネットワーク接続することも可能です。
イメージ図
下図は、ユーザーが利用するコンピュータ(クライアント コンピュータ)、Apache によるプロキシサーバー、TeamPage サーバーの接続例です。
Apache は HTTPS で稼働しているので、クライアント コンピュータと Apache との間の通信は暗号化されます。Apache と TeamPage の間は暗号化されない HTTP 通信になります。

使用環境
ここでは、Windows Server 2022 環境で次のバージョンを使用します。
- OpenSSL = バージョン 3.4.1 Light
- Apache HTTP Server = バージョン 2.4.63 Win64
- TeamPage Server = バージョン 7.0.13
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 を選択しました。

インストール
ダウンロードした 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 を作成し、次の内容を記述してください。
- C = JP (2文字国名)
- ST = Tokyo (都道府県)
- L = Chiyoda (市区)
- O = My Company (会社名・組織名)
- CN = winvm.local (サーバー名)
[ 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)