前回まで作成したものは、iphone などで接続すると、マイクが利用できないと思います。
※ マイクの利用は https 接続が前提になるはず(セキュリティの制限のよるもの)
そのため、今回はリバースプロキシを作ってみます。
証明書の準備
-
Powershell を起動し、作業フォルダーに移動します。
# 証明書や設定ファイルを保存する予定のディレクトリへ移動する(フォルダーは事前に用意してください。) cd c:\openwebui\nginx-https # Docker コンテナを使って、現在のフォルダーに証明書を作成 # -x509:X.509形式の証明書を作成する(自己証明の証明書) # -nodes:No DES(秘密鍵にパスワードを設定しません) # -newkey rsa:2048:新しい RSA 鍵を生成、鍵長 2048bit(推奨)→ key.pem が生成される # -keyout key.pem:key.pem(秘密鍵)ファイルとして出力する # -out cert.pem:cert.pem(証明書 - 公開キーとして利用)ファイルとして証明書を出力する # -days 3650:有効期限が 3650 日 # -subj "/CN=localhost":https でアクセスする際のホスト名。アドレスでアクセスする場合、IP アドレスでもいい # -v "${PWD}:/work":現在の Windows の作業フォルダーをコンテナの /work フォルダーとしてマウントする(-v でマウントしたファイルを触ったら、そのままコンテナに反映されます) docker run --rm -v "${PWD}:/work" alpine/openssl req -x509 -nodes -newkey rsa:2048 -keyout /work/key.pem -out /work/cert.pem -days 3650 -subj "/CN=hostname" # ホスト名を IP アドレスを利用する場合、-addext を使えば、設定ファイルなしで 1 line で IP アドレス入りの証明書が作成可能 # docker run --rm -v "${PWD}:/work" alpine/openssl req -x509 -nodes -newkey rsa:2048 -keyout /work/key.pem -out /work/cert.pem -days 3650 -subj "/CN=192.168.0.8" -addext "subjectAltName = IP:192.168.0.8" -
以下の内容で、nginx.conf ファイルを作成します。(openwebui のポートが 3000 なら、このままで問題ないが、他のポートを使っている場合、3000 を編集してください)
events {} http { server { listen 80; server_name _; return 301 https://$host$request_uri; } server { listen 443 ssl; ssl_certificate /etc/nginx/certs/cert.pem; ssl_certificate_key /etc/nginx/certs/key.pem; location / { proxy_pass http://host.docker.internal:3000; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_buffering off; proxy_cache off; chunked_transfer_encoding off; } } } - 証明書と nginx.conf を配置したフォルダで、下記のコマンドを実行し、Nginx を起動します。
# リバースプロキシのコンテナを作成する # .conf ファイルを更新した場合、再起動してください。 docker run -d --name nginx-https -p 80:80 -p 443:443 -v ${PWD}\nginx.conf:/etc/nginx/nginx.conf -v ${PWD}\cert.pem:/etc/nginx/certs/cert.pem -v ${PWD}\key.pem:/etc/nginx/certs/key.pem nginx - これで
https://hostnameを使って、https 経由で Open WebUI へアクセスすることができるようになります。
※ 通常の openssl req は CSR (Certificate Signing Request: 証明書署名要求) を作成しますが、-x509 を付けると CSR を作らずに、その場で証明書を発行 します。
※ 証明書の中には公開鍵が含まれているので、公開キーとして利用される(公開鍵、サーバー名(CN)、有効期限、発行者(CA)、電子署名 が含まれる)

コメント