Collaboration ServerにHTTPS(SSL接続)を設定する方法

SSL証明書の設置

Exploratory Collaboration Serverの圧縮ファイルを展開してできた、“exploratory” というディレクトリの直下にある “ssl” ディレクトリにSSL証明書ファイルと、秘密鍵ファイルを置きます。“ssl” ディレクトリがない場合は “ssl” という名前のディレクトリを作成してください。

以下、SSL証明書ファイルをfullchain.pem、秘密鍵ファイルをprivkey.pemであるとしてSSLの設定の説明を進めます。

Collaboration Server自体のSSL接続の設定

docker-compose.ymlの設定

“exploratory” ディレクトリの直下にある、docker-compose.ymlファイルのnginxの項目の中で、以下のような変更を行います。

  1. nginxが、先程のsslディレクトリを読み込めるように、volumesの項目リストに、- './ssl:/etc/nginx/ssl'を追加します。
  2. SSL接続(HTTPS)のデフォルトのポート番号である、443を開くため、元の- '8080:80'といった行の代わりに、- '443:443'とします。

元の設定:

  nginx:
    image: 'nginx:1.15.0-alpine'
    volumes:
      - './default.conf:/etc/nginx/conf.d/default.conf:ro'

    ...その他の設定...
    ports:
      -  '8080:80'

変更後の設定:

default.confの設定

“exploratory” ディレクトリの直下にある、default.conf(nginxウェブサーバーの設定ファイル)を編集して、SSLを使用した設定にします。

  1. SSL接続(HTTPS)のデフォルトのポート番号である、443を使用するため、元のlisten 80といった行の代わりに、listen 443;とします。
  2. SSLを有効化するため、ssl on; を追加します。また、SSL証明書ファイルと、秘密鍵ファイルの指定を以下のように追加します。設定の中のファイル名fullchain.pem, privkey.pemはご使用のファイル名に合わせて変更してください。

    ssl on;
    ssl_certificate    /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key    /etc/nginx/ssl/privkey.pem;
  3. サーバー内で生成するURLで使うプロトコルをhttpsにするため、proxy_set_header X-Forwarded-Proto httpの行を変更して、proxy_set_header X-Forwarded-Proto httpsとします。

元の設定の例:

 server {
    listen       80;
    server_name  localhost;

    client_max_body_size 100m; # increased this for data share.
    location / {
        proxy_pass http://exploratory:3000/;
        proxy_set_header Host $http_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 http;
    }
}

変更後の設定の例:

AgendashのSSL接続の設定

スケジュールしたジョブの管理画面であるAgendashは、ポート番号3001でアクセスできますが、Collaboration Server自体にSSL(HTTPS)を使用すると、ブラウザがAgendashに対してもSSLでないと接続を拒否することがありますので、こちらも同時にSSLを設定することをおすすめします。

docker-compose.ymlの設定

SSLの暗号化、復号化を行うnginxウェブサーバーで、ポート3001へのリクエストを受け取るようにするため、“exploratory” ディレクトリの直下にある、docker-compose.ymlファイルのnginxの項目の中で、portsの設定に、- '3001:3001'を追加します。

元の設定:

  nginx:
    image: 'nginx:1.15.0-alpine'
    ...その他の設定...
    ports:
      - '443:443'

変更後の設定:

また、agendashが直接ポート3001へのリクエストを受け取らないようにしたいので、agendashの項目のports:- '3001:3001'の行は削除またはコメントアウトします。

元の設定:

  agendash:
    image: 'scheduler:5.5.4.0'
    depends_on:
      - mongodb
    volumes:
      - './tmp:/tmp'
    ports:
      - '3001:3001'

変更(コメントアウト)後の設定:

default.confの設定

以下のような、nginxウェブサーバーでポート3001番でSSLを使用して、リクエストをAgendashに渡すような設定を“exploratory” ディレクトリの直下にある、default.confの末尾に追加します。設定の中のファイル名fullchain.pem, privkey.pemはご使用のファイル名に合わせてください。

server {
    listen       3001;
    server_name  localhost;

    ssl    on;
    ssl_certificate    /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key    /etc/nginx/ssl/privkey.pem;

    location / {
        proxy_pass http://agendash:3001/;
        proxy_set_header Host $http_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 https;
    }
}

変更前の設定(Collaboration Server自体のSSL設定のみ):

 server {
    listen       443;
    server_name  localhost;
        
    ssl  on;
    ssl_certificate  /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key  /etc/nginx/ssl/privkey.pem;

    client_max_body_size 100m; # increased this for data share.
    location / {
        proxy_pass http://exploratory:3000/;
        proxy_set_header Host $http_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 https;
    }
}

変更後の設定(AgendashのSSL設定を末尾に追加後):