LoginSignup
3
3

More than 5 years have passed since last update.

Docker 上の nginx で Mattermost と Knowledge と Joomla をリバースプロキシさせてみた Ver.1

Last updated at Posted at 2018-10-06

はじめに

Docker はいろんな Web アプリをサクッと使い始めるのにとっても便利。でも、アプリごとにポート番号違いの URL というのはわかりにくいしかっこ悪い。
リバースプロキシで URL を整備したいと思うのは必然で、リバースプロキシといえば、nginx でしょ。ということで、nginx も Docker コンテナで立てて、個々のアプリを繋げてみた。

Ver.2 として書き直した方法の方がおすすめです。

構成

ポイントと落とし穴

  • 今回の方法で同一サーバー上に複数 Web アプリを動作させる場合、コンテキストパス付き URL に対応した Web アプリであることが条件。
  • Docker に配置した Web アプリへ nginx から転送するには、転送先として localhost の代わりに docker0 の IP アドレスを指定。
  • Web アプリに応じて proxy_set_header ほかの調整が必要。 Mattermost については こちらを参照。
  • 共通の proxy_set_header を server ディレクティブに記述してみたが、うまく機能しなかったので、location ディレクティブに記述。

設定

nginx

Mattermost

Knowledge

Joomla!


サンプル: reverseproxy.conf


# ref=http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass
server {
    listen       80;
    server_name  docker.example.com;

    set $docker0 172.17.0.1;
    # set $docker0 192.168.0.1;

    # ref=https://docs.mattermost.com/install/config-proxy-nginx.html
    location ~ /mattermost/api/v[0-9]+/(users/)?websocket$ {
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        client_max_body_size 50M;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Frame-Options SAMEORIGIN;
        proxy_buffers 256 16k;
        proxy_buffer_size 16k;
        client_body_timeout 60;
        send_timeout 300;
        lingering_timeout 5;
        proxy_connect_timeout 90;
        proxy_send_timeout 300;
        proxy_read_timeout 90s;
        proxy_pass http://$docker0:8065;
    }

    location /mattermost/ {
        client_max_body_size 50M;
        proxy_set_header Connection "";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Frame-Options SAMEORIGIN;
        proxy_buffers 256 16k;
        proxy_buffer_size 16k;
        proxy_read_timeout 600s;
        proxy_http_version 1.1;
        proxy_pass http://$docker0:8065;
    }

    location /knowledge/ {
        proxy_set_header        Host                $host;
        proxy_set_header        X-Real-IP           $remote_addr;
        proxy_set_header        X-Forwarded-For     $proxy_add_x_forwarded_for;
        proxy_set_header        X-Forwarded-Proto   $scheme;
        proxy_set_header        X-Frame-Options     SAMEORIGIN;
        proxy_pass              http://$docker0:18080;
    }

    location /joomla/ {
        proxy_set_header        Host                $host;
        proxy_set_header        X-Real-IP           $remote_addr;
        proxy_set_header        X-Forwarded-For     $proxy_add_x_forwarded_for;
        proxy_set_header        X-Forwarded-Proto   $scheme;
        proxy_set_header        X-Frame-Options     SAMEORIGIN;
        proxy_pass              http://$docker0:28080;
    }

    # ref=http://nginx.org/en/docs/beginners_guide.html
    location / {
        root    /var/www;
    }
}
3
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3