search
LoginSignup
1

More than 3 years have passed since last update.

posted at

updated at

dockerでredashのnginxをssl化したら思いの外ハマった

はじめに

dockerでredashのnginxをssl化したら思いの外ハマった

社内でデータを統計表示するのにredashを使っており、
一応webアクセスできるため、ssl化しておこうとなった

さくっとググった限りでは、手順は簡単だと思っていたが(実際後から振り返ると簡単だった)、
しょうもないところでハマって時間がかかってしまったため、
記録だけ残しておこうと思う

redash構築

公式のdocker-composeを使用して構築する

詳細は割愛

証明書を準備する

今回はletsencryptなどを使わず、第三者の証明書発行を使用した。

用意したファイルは以下のもの
/root/ssl/とかに配置しておく

証明書         server.crt
中間証明書      server_bundle.crt
証明鍵         server.key

証明書と中間証明書を一緒にしておく

# cat server_bundle.crt >> server.crt

nginxの設定ファイルを準備する

ホスト側のubuntuに、docker上で適用させるnginx設定ファイルを作成する

# vi /root/nginx/default.conf

upstream redash {
  server redash:5000;
}

server {
    listen 80 default;
    server_name example.com;

    return 301 https://$host$request_uri;
}

server {
    listen 443;
    ssl on;
    ssl_prefer_server_ciphers on;
    ssl_protocols TLSv1.2;
    ssl_ciphers "ECDHE+RSAGCM:ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:!EXPORT:!DES:!3DES:!MD5:!DSS";

    gzip on;
    gzip_types *;
    gzip_proxied any;

    server_name example.com;
    ssl_certificate /etc/nginx/ssl/server.crt; # サーバー証明書のパス
    ssl_certificate_key /etc/nginx/ssl/server.key; # 秘密鍵のパス

    error_log /var/log/nginx/nginx_error.log;
    access_log /var/log/nginx/nginx_access.log;

    location / {
      proxy_ssl_server_name on;
      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 $http_x_forwarded_proto;
      proxy_pass       http://redash;
 }

}

docker-composeファイルを編集する

docker-compose.ymlの中で、nginxの部分を以下のように編集する

443ポートを通信許可し、
上記で作ったファイルへパスを通す

vi docker-compose.yml

~略
  nginx:
    image: redash/nginx:latest
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /root/nginx/default.conf:/etc/nginx/conf.d/default.conf
      - /root/ssl:/etc/nginx/ssl
    depends_on:
      - server
    links:
      - server:redash
    restart: always

dockerの再構築

準備ができたら一度既存のdocokerを壊し、再構築する

# docker-compose down

# docker-compose up -d

アクセスする

以下のようなurlでブラウザからアクセスするとhttps化されてるはず
https://IPアドレス/dashboards

はまったところ

ファイアウォール

超初歩的なところだが、クラウド上のファイアウォールで443の通信を許可しておらず、
ブラウザでアクセスしようとするたびにタイムアウトになっていた

OS上ではufwをアクティブにしていなかったためしばらく混乱していたが、
クラウド側で通信許可をしたらすぐにつながった

リダイレクト

nginxのdefault.confにおいて、
当初リダイレクトの部分を下記のようにしており、
ssl化した後も「Bad Gateway」の表示となっていた

proxy_pass       https://redash;

上記のurlをhttpにすることで正常な画面を表示させることができた

どうもクライアントからwebアクセスするときは443ポートを使用し、
サーバー内のdockerネットワークにおいて通信するときは80ポートを使用している、
というような仕組みのようである

dockerについて一つ勉強になった。

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
What you can do with signing up
1