Apache 2.4 で WebSocket をプロキシしたい。以前書いた docker-compose のフロントとして Apache を立てると、バックエンドで WebSocket を使う場合にすこしの設定を足す必要がある。
docker-compose で LDAP 認証のリバースプロキシを設定する | ごみばこいん Blog
nginx 使えよって話、めっちゃわかる。そのうちやる…たぶん…
ちなみに Apache 2.2 だとパッチがいたりするそうなので、がんばって!って感じっぽい。
httpd.conf あるいはその手の Apache 設定ファイルで以下のような設定を足すと良い。
# ...略...
# WebSocket をプロキシするモジュールを読み込み
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
# ...略...
# 例えば Jupyter の場合はこんなパスをプロキシしてあげる
# websocket
ProxyPass /api/kernels/ ws://${REVERSE_PROXY}/api/kernels/
ProxyPassReverse /api/kernels/ ws://${REVERSE_PROXY}/api/kernels/
ProxyPass /terminals/websocket/ ws://${REVERSE_PROXY}/terminals/websocket/
ProxyPassReverse /terminals/websocket/ ws://${REVERSE_PROXY}/terminals/websocket/
# http
ProxyPass / http://${REVERSE_PROXY}/
ProxyPassReverse / http://${REVERSE_PROXY}/
REVERSE_PROXY は環境変数で、バックエンド( Jupyter )のホスト(とポート)を指定する。ぼくの手元のやつは docker-compose を使ってるのでこんな感じに書いている。
version: "3"
services:
jupyter:
container_name: "${APP_NAME}_jupyter"
build: ./docker-jupyter
command: start-notebook.sh --NotebookApp.token=''
volumes:
- ./notebooks:/home/jovyan/work
environment:
GRANT_SUDO: 1
NB_UID: ${NB_UID}
NB_GID: ${NB_GID}
proxy:
container_name: "${APP_NAME}_proxy"
build: ./docker-proxy
ports:
- "${HTTP_PORT}:80"
links:
- jupyter:jupyter
environment:
REVERSE_PROXY: jupyter:8888
httpd:alpine の Docker イメージを利用しても WebSocket のプロキシが出来るので、そんな感じ。 いじょ