AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

Nginx を SSL アクセラレーターとして利用する

いままで L7 リバースプロキシとか SSL アクセラレーターを用意する場合、個人的に Pound を愛用していたのだけれど、 certbot による Let's Encrypt 発行証明書で便利にやりたくて Nginx に移行した。 大体の場合、ウェブサーバーがアプリケーションサーバーも兼ねているので、このあたりも解決できるんだけど、そうじゃないパターンを引いたので備考的に書いておく。

Nginx で実現

ほとんどのディストリで /etc/nginx/nginx.conf 内に Include ./conf.d/* とか書かれていると思われる。 で、この ./conf.d/ の中には default.conf とか初期配置のコンフィグがあると思うので、これを書き換えるか、削除して別途ファイルを用意すると良い。

今回は、削除して別途 001_reverseproxy.conf という名前のファイルを新しく設置することにした。

001_reverseproxy.conf

適当なエディタで www.example.com を目的のホスト名に置き換えて下さい。

server{
    # HTTP -> HTTPS
    listen 80;
    server_name www.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name www.example.com;

    # Cert
    ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;

    # Log
    access_log /var/log/nginx/www.example.com.access.log  main;

    # Set http header
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    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;

    # Static error pages
    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    # Proxy to APP
    location / {
        proxy_pass http://localhost:8080/;
    }
}

http アクセスしてきたときについて

目的のホスト名に http (80) でアクセスしてきた場合は https (443) へリダイレクトします。 太古のバージョンの Nginx の民だったので rewrite を使って正規表現いっぱい書かないとだめだと思ってたけど、ググったらそうじゃないらしい事が書いてあって公式もそう言っていた。

This is a wrong, cumbersome, and ineffective way. The right way is to define a separate server for example.org:

nginx.org

ちなみになぜこんなことを

moodle を立てようと思って bitnami のイメージから起動したんだけど /opt/bitnami/bncert-tool がなくて詰んだので、とりあえずの処置でコンテナの外で SSL アクセラレーターをやらせるようにしたので。

docs.bitnami.com

いうてこの後、 moodleconfig.phpプロトコルhttps にしたり、 proxy 環境では setproxy を設定しろだのあってめんどくさくなるのであった。