【第7回】社内AIチャットシステムOla-UIを構築しよう!- ネット越しアクセス(2)HTTPS対応とApache/Caddy構築編
はじめに
「社内AIチャットシステムOla-UI構築シリーズ」の第7回へようこそ!
前回(第6回)では、DDNS経由での外部アクセスを実現しました。しかし、HTTP(非暗号化)での通信はセキュリティ上のリスクがあります。
今回は、HTTPS化による安全な通信と、本格的なWebサーバー(Apache/Caddy)の構築を解説します。
これまでのおさらい
第6回: DDNS経由アクセス
✅ DDNSサービスの登録
✅ ポート転送設定
✅ PHP内蔵サーバーの外部公開
✅ 基本認証の設定
今回は、さらにセキュアで本格的な環境を構築します。
本記事の目標
第7回では、HTTPSによる暗号化通信を実現し、ApacheまたはCaddyを使った本格的なWebサーバーを構築します。
所要時間
- 📅 約90〜120分
学べること
- SSL/TLSとHTTPSの基本
- Let's Encryptによる無料SSL証明書取得
- Apacheのインストールと設定
- Caddyによる自動HTTPS(簡単!)
- リバースプロキシ設定
- セキュリティヘッダーの設定
構成の選択肢
方法1: Apache + Let's Encrypt(本格的)
- ✅ 業界標準のWebサーバー
- ✅ 豊富な機能とカスタマイズ性
- ⚠️ 設定が複雑
方法2: Caddy(推奨・簡単)
- ✅ 自動HTTPS(設定不要!)
- ✅ 設定がシンプル
- ✅ モダンで高速
- ⚠️ 新しいため情報が少ない
💡 推奨: 初心者はCaddy、経験者はApache
この記事では両方の方法を解説します!
【方法1】Apache + Let's Encrypt
STEP 1: Apacheのインストール
1.1 Apache Lounge版のダウンロード
Windows版Apacheは、Apache Loungeから入手します。
- https://www.apachelounge.com/download/ にアクセス
- Apache 2.4.xx Win64をダウンロード
- ZIPファイルを解凍
Apache24フォルダをC:\にコピー
フォルダ構成:
C:\Apache24\
├── bin\ ← 実行ファイル
├── conf\ ← 設定ファイル
├── htdocs\ ← Webコンテンツ
├── logs\ ← ログファイル
└── modules\ ← モジュール
1.2 Visual C++ Redistributableのインストール
Apacheの実行には必要です。
- https://aka.ms/vs/17/release/vc_redist.x64.exe をダウンロード
- インストール
- PCを再起動
1.3 httpd.confの基本設定
C:\Apache24\conf\httpd.conf を編集:
① ServerNameの設定
# 37行目あたり
ServerName myola.ddns.net:80
② DocumentRootの設定
# 251行目あたり
DocumentRoot "C:/ola-ui"
<Directory "C:/ola-ui">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
③ PHPモジュールの追加
ファイルの最後に追加:
# PHP設定
LoadModule php_module "C:/php/php8apache2_4.dll"
PHPIniDir "C:/php"
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
⚠️ 注意:
php8apache2_4.dllがPHPフォルダに存在することを確認
1.4 Apacheのサービス登録
管理者権限のコマンドプロンプトで実行:
cd C:\Apache24\bin
httpd.exe -k install
サービスの起動:
httpd.exe -k start
動作確認:
http://localhost/
✅ Apacheのテストページが表示されればOK
STEP 2: Let's Encryptで無料SSL証明書取得
2.1 Win-ACMEのダウンロード
Win-ACMEは、WindowsでLet's Encryptを使うためのツールです。
- https://www.win-acme.com/ にアクセス
- Downloadから最新版をダウンロード
- ZIPファイルを
C:\win-acmeに解凍
2.2 証明書の取得
事前準備
- ✅ DDNSドメイン(
myola.ddns.net)が設定済み - ✅ ポート80と443が転送設定済み
- ✅ Apacheが起動中
実行手順
管理者権限のコマンドプロンプトで:
cd C:\win-acme
wacs.exe
対話形式の設定:
1. N: Create certificate (default settings)
2. 2: Manual input
3. ホスト名入力: myola.ddns.net
4. メールアドレス入力: your-email@example.com
5. 利用規約に同意: Y
証明書が自動生成され、Apacheに適用されます。
証明書の保存場所:
C:\Users\<ユーザー名>\AppData\Roaming\win-acme\certificates\
STEP 3: ApacheでHTTPSの有効化
3.1 SSL モジュールの有効化
httpd.conf を編集:
# 以下の行のコメントアウトを外す
LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
# SSL設定ファイルのインクルード
Include conf/extra/httpd-ssl.conf
3.2 httpd-ssl.confの設定
C:\Apache24\conf\extra\httpd-ssl.conf を編集:
# 仮想ホストの設定
<VirtualHost _default_:443>
ServerName myola.ddns.net:443
DocumentRoot "C:/ola-ui"
SSLEngine on
SSLCertificateFile "C:/Users/<ユーザー名>/AppData/Roaming/win-acme/certificates/myola.ddns.net.crt"
SSLCertificateKeyFile "C:/Users/<ユーザー名>/AppData/Roaming/win-acme/certificates/myola.ddns.net.key"
SSLCertificateChainFile "C:/Users/<ユーザー名>/AppData/Roaming/win-acme/certificates/myola.ddns.net-chain.crt"
# セキュリティヘッダー
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
</VirtualHost>
3.3 Apacheの再起動
cd C:\Apache24\bin
httpd.exe -k restart
3.4 ルーターのポート443転送設定
ルーター管理画面で、ポート443の転送を追加:
| 項目 | 設定値 |
|---|---|
| 外部ポート | 443 |
| 内部IPアドレス | 192.168.1.100 |
| 内部ポート | 443 |
| プロトコル | TCP |
3.5 動作確認
https://myola.ddns.net/index_t.html
✅ 鍵マークが表示され、HTTPSで接続できればOK!🎉
【方法2】Caddy(推奨・簡単)
STEP 4: Caddyのインストール
4.1 Caddyのダウンロード
- https://caddyserver.com/download にアクセス
- Windows amd64を選択
- ダウンロードして
C:\caddy\に配置
フォルダ構成:
C:\caddy\
├── caddy.exe
└── Caddyfile
4.2 Caddyfileの作成
C:\caddy\Caddyfile を作成:
myola.ddns.net {
# 自動HTTPS(Let's Encrypt)
email your-email@example.com
# Ola-UIのルートディレクトリ
root * C:/ola-ui
# PHPの処理
php_fastcgi localhost:9000
# ファイルサーバー
file_server
# セキュリティヘッダー
header {
Strict-Transport-Security "max-age=63072000; includeSubDomains"
X-Content-Type-Options "nosniff"
X-Frame-Options "SAMEORIGIN"
X-XSS-Protection "1; mode=block"
}
}
💡 驚きの簡単さ: これだけでHTTPS自動設定!
4.3 PHP-FPMのインストール
Caddyを使う場合、PHP-FPMが必要です。
ダウンロード
- https://windows.php.net/download/ にアクセス
- Non Thread Safe版をダウンロード
C:\php-fpm\に解凍
php-cgi.exeの起動
cd C:\php-fpm
php-cgi.exe -b 127.0.0.1:9000
このコマンドプロンプトは開いたままにします。
4.4 Caddyの起動
管理者権限のコマンドプロンプトで:
cd C:\caddy
caddy.exe run
初回起動時: - Let's Encryptに自動登録 - SSL証明書を自動取得 - HTTPSが自動有効化
ログ出力例:
INFO using provided configuration {"config_file": "Caddyfile"}
INFO tls.obtain acquiring lock {"identifier": "myola.ddns.net"}
INFO tls.obtain lock acquired {"identifier": "myola.ddns.net"}
INFO tls.issuance certificate obtained successfully
INFO tls serve {"server_name": ["myola.ddns.net"]}
4.5 動作確認
https://myola.ddns.net/index_t.html
✅ HTTPSで自動リダイレクトされ、接続できればOK!🚀
STEP 5: リバースプロキシ設定(Ollamaとの連携)
5.1 Ollamaへのプロキシ(Apache)
httpd.conf に追加:
# リバースプロキシモジュールの有効化
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
# Ollamaへのプロキシ
ProxyPass /ollama http://localhost:11434
ProxyPassReverse /ollama http://localhost:11434
5.2 Ollamaへのプロキシ(Caddy)
Caddyfile に追加:
myola.ddns.net {
email your-email@example.com
root * C:/ola-ui
php_fastcgi localhost:9000
file_server
# Ollamaへのプロキシ
reverse_proxy /ollama/* localhost:11434
}
5.3 config.iniの修正
C:\ola-ui\config.ini を編集:
[Ollama]
; ローカル直接アクセス(内部ネットワーク用)
endpoint = http://127.0.0.1:11434
; プロキシ経由アクセス(外部からのアクセス用)
; endpoint = https://myola.ddns.net/ollama
STEP 6: 自動起動スクリプトの作成
6.1 Apache版
C:\ola-ui\start_all_apache.bat:
@echo off
title Ola-UI System (Apache + HTTPS)
echo ========================================
echo Ola-UI System 起動
echo ========================================
echo.
REM No-IP DUC起動
echo [1/3] No-IP DUC起動中...
start "" "C:\Program Files (x86)\No-IP\DUC.exe"
timeout /t 3 /nobreak > nul
echo ✅ 完了
echo.
REM Ollama起動
echo [2/3] Ollama起動中...
start /B ollama serve
timeout /t 5 /nobreak > nul
echo ✅ 完了
echo.
REM Apache起動
echo [3/3] Apache起動中...
cd C:\Apache24\bin
httpd.exe -k start
echo ✅ 完了
echo.
echo ========================================
echo すべてのサービスが起動しました
echo ========================================
echo.
echo アクセスURL: https://myola.ddns.net
echo.
pause
6.2 Caddy版
C:\ola-ui\start_all_caddy.bat:
@echo off
title Ola-UI System (Caddy + HTTPS)
echo ========================================
echo Ola-UI System 起動
echo ========================================
echo.
REM No-IP DUC起動
echo [1/4] No-IP DUC起動中...
start "" "C:\Program Files (x86)\No-IP\DUC.exe"
timeout /t 3 /nobreak > nul
echo ✅ 完了
echo.
REM Ollama起動
echo [2/4] Ollama起動中...
start /B ollama serve
timeout /t 5 /nobreak > nul
echo ✅ 完了
echo.
REM PHP-FPM起動
echo [3/4] PHP-FPM起動中...
cd C:\php-fpm
start /B php-cgi.exe -b 127.0.0.1:9000
timeout /t 3 /nobreak > nul
echo ✅ 完了
echo.
REM Caddy起動
echo [4/4] Caddy起動中...
cd C:\caddy
start /B caddy.exe run
timeout /t 3 /nobreak > nul
echo ✅ 完了
echo.
echo ========================================
echo すべてのサービスが起動しました
echo ========================================
echo.
echo アクセスURL: https://myola.ddns.net
echo.
pause
STEP 7: セキュリティ強化
7.1 HTTPからHTTPSへの自動リダイレクト
Apache
httpd.conf に追加:
<VirtualHost *:80>
ServerName myola.ddns.net
Redirect permanent / https://myola.ddns.net/
</VirtualHost>
Caddy
Caddyは自動でリダイレクトしてくれます(設定不要)!
7.2 セキュリティヘッダーの設定
すでにSTEP 3.2とSTEP 4.2で設定済みですが、確認しましょう。
重要なヘッダー
- Strict-Transport-Security: HTTPS強制
- X-Content-Type-Options: MIMEタイプスニッフィング防止
- X-Frame-Options: クリックジャッキング防止
- X-XSS-Protection: XSS攻撃防止
7.3 SSL/TLS設定の最適化
Apache
httpd-ssl.conf に追加:
# 強力な暗号スイートのみ許可
SSLCipherSuite HIGH:!aNULL:!MD5:!3DES
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder on
Caddy
Caddyは自動で最適化してくれます(デフォルトで最新のセキュリティ設定)!
STEP 8: パフォーマンス最適化
8.1 圧縮の有効化
Apache
httpd.conf に追加:
LoadModule deflate_module modules/mod_deflate.so
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
</IfModule>
Caddy
Caddyfile に追加:
myola.ddns.net {
encode gzip zstd
# ... その他の設定
}
8.2 キャッシュの設定
Apache
httpd.conf に追加:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType text/css "access plus 1 week"
ExpiresByType application/javascript "access plus 1 week"
</IfModule>
STEP 9: 監視とログ管理
9.1 アクセスログの確認
Apache
C:\Apache24\logs\access.log
C:\Apache24\logs\error.log
Caddy
C:\caddy\caddy.log
9.2 ログローテーション
ログファイルが大きくなりすぎないよう、定期的に削除または圧縮します。
PowerShellスクリプト C:\ola-ui\rotate_logs.ps1:
# 7日以上前のログを削除
Get-ChildItem "C:\Apache24\logs\" -Filter *.log | Where-Object {
$_.LastWriteTime -lt (Get-Date).AddDays(-7)
} | Remove-Item
Write-Host "✅ ログローテーション完了"
タスクスケジューラで週次実行。
トラブルシューティング
Q1: SSL証明書の取得に失敗する
原因: ポート80または443が開いていない
確認:
netstat -an | findstr ":80"
netstat -an | findstr ":443"
解決策: 1. ルーターのポート転送を確認 2. Windowsファイアウォールを確認 3. 他のプログラムがポートを使用していないか確認
Q2: 「NET::ERR_CERT_AUTHORITY_INVALID」エラー
原因: 証明書の検証に失敗
解決策(Let's Encrypt): 1. DDNSドメインが正しく設定されているか確認 2. DNSの伝播を待つ(最大48時間) 3. Win-ACMEまたはCaddyを再実行
Q3: Apacheが起動しない
原因: 設定ファイルに誤りがある
確認:
cd C:\Apache24\bin
httpd.exe -t
エラーメッセージを確認して修正。
Q4: PHPが動作しない
原因: PHPモジュールが読み込まれていない
確認:
- php8apache2_4.dll が存在するか
- httpd.conf で正しくLoadModuleされているか
解決策: - PHP Thread Safe版を使用(Apache用) - PHP Non Thread Safe版を使用(Caddy用、PHP-FPM)
まとめ
本記事で学んだこと
✅ SSL/TLSとHTTPSの基本
✅ Let's Encryptでの無料SSL証明書取得
✅ Apacheのインストールと設定
✅ Caddyによる自動HTTPS(簡単!)
✅ リバースプロキシ設定
✅ セキュリティヘッダーの設定
✅ パフォーマンス最適化
所要時間
- ⏱️ Apache構築: 約60分
- ⏱️ Caddy構築: 約30分(簡単!)
- ⏱️ セキュリティ設定: 約20分
- ⏱️ 動作確認: 約10分
次回予告
第8回: ネット越しアクセス(3)レンタルサーバー経由編
次回は、レンタルサーバーにOla-UIを配置し、自宅PCのOllamaにリモートアクセスする方法を解説します。
次回の内容
- レンタルサーバーの選定
- Ola-UIのレンタルサーバー配置
- SSH通信とトンネリング
- セキュアなOllama接続
- 固定IPなしでの運用
お楽しみに!
参考リンク
著者: Ola-UI サポートチーム
公開日: 2026年1月29日
カテゴリ: チュートリアル, HTTPS, SSL/TLS, Apache, Caddy
タグ
#OlaUI #HTTPS #SSL #Apache #Caddy #Let'sEncrypt #セキュリティ #チュートリアル