2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-10-25

#はじめに#
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について一つ勉強になった。

2
1
0

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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?