NginxをリバースプロキシとしてDockerコンテナに中継する

Nginxを使って別のコンテナに通信を中継する設定方法の覚書です。

作成日: 2019-03-04

方針

  1. フロントはhttpsで待ち受け、コンテナへはhttpで通信する
  2. フロントへのhttp通信はhttpsにリダイレクトする
  3. 起動していないコンテナがあってもリバースプロキシが起動するようにする

リバースプロキシの基本設定

proxy_set_header    Host                $host;
proxy_set_header    X-Forwarded-Host    $host;
proxy_set_header    X-Forwarded-Server  $host;
proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
proxy_set_header    X-Forwarded-Proto   $scheme;
proxy_set_header    X-Real-IP           $remote_addr;

起動していないコンテナに中継する

nginxは起動時にDNSで名前解決できないドメインがあるとプロセスが終了してしまう。この対策として、Nginxの変数を使って名前解決をリクエスト時に行う方法が知られている。

  location ^~ / {
    include "conf.d/docker_proxy";
    set $upstream container_name;
    break;
    proxy_pass          http://$upstream$uri$is_args$args;
    proxy_redirect      http:// https://;
  }