サイトをFreeBSD11+python3.6+Bottleで作り直すメモ(12)-nginxとcertbotでリバースプロキシ

今日びのWebsiteはhttpsじゃないとダメとかいわれているので、別サーバ(FreeBSD12.1のルータ)にインストールしたnginxでリバースプロキシを動かしつつ、Let's Encryptでhttps化を試みる。

インストール

pkgでnginx-liteとpy37-certbot-nginxをインストールする。

>pkg install nginx-lite
>pkg install py37-certbot-nginx

Let's Encryptの設定

基本的には毎日防備録に書いてある通り。ただし、最初の"How would you like to authenticate with the ACME CA?"という質問については、"1: Nginx Web Server plugin (nginx)"を選択した。

証明書の取得に成功したら、/etc/periodic.confweekly_certbot_enable="YES"を追加する。

nginxの設定

@HeRo氏によるQiita: Let's Encrypt で Nginx にSSLを設定すると、久保達彦、道井俊介『nginx実践入門』(技術評論社)を参考にして、nginxの設定ファイル /usr/local/etc/nginx/nginx.confserver { … } を以下のように設定した。

server {
    listen       80;
    server_name  www.ktjdragon.com;

    location /{
        return 301 https://ktjdragon.com$request_uri;
    }

}
server {
    listen       443 ssl;
    server_name  ktjdragon.com;

    ssl_certificate      /usr/local/etc/letsencrypt/live/ktjdragon.com/fullchain.pem;
    ssl_certificate_key  /usr/local/etc/letsencrypt/live/ktjdragon.com/privkey.pem;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    location / {
            client_max_body_size 8m;
            client_body_buffer_size 16k;
            client_body_temp_path /usr/local/www/nginx_client_body_temp;

            proxy_buffering on;
            proxy_buffer_size 8k;
            proxy_buffers 64 8k;
            proxy_max_temp_file_size 1024m;
            proxy_temp_path /usr/local/www/nginx_proxy_temp;

            proxy_connect_timeout 5s;
            proxy_send_timeout 10s;
            proxy_read_timeout 10s;

            proxy_pass http://Bottleが動いているサーバのipアドレス;

    }
}

やっていることは以下の通り。

(2020/5/24追記)

リバースプロキシで404エラーが出るとBottle側のURLが出てしまうことに気づいた。とりあえずチュートリアル通りに簡単なエラーページに差し替えるようにした。

(追記終わり)

(2023/1/14追記)

FreeBSDを13.1に更新したら再度Bottle側のエラーが出るようになったので対応。Pythonが3.9になったので pip-3.9 show bottle を実行してbottleの保存先を確認。そして、 bottle.py を編集。エラーメッセージである"Sorry, the requested URL"を検索し、見つかった行の {{repr(request.url)}}{{repr(request.url).replace('http://Bottle側のIPアドレス/', 'https://ドメイン名/')}} に差し替える。

(追記終わり)

サブドメインの追加(2022/9/8追記)

自分専用Webアプリ(自宅外からもアクセスできるようにする)を動かすため、DESIGNSUPPLY.LCCの「Let's EncryptのSSL証明書にサブドメインもSSL対応に追加する」を参考にサブドメインを追加した。手順は以下の通り。

  1. リバースプロキシを停止する(certbotがwwwのポートを使用するため) # service nginx stop

  2. certbot --authenticator standalone --installer nginx --expand -d ktjdragon.com -d サブドメイン.ktjdragon.com を実行

  3. 登録されたことを示すメッセージを確認

  4. /usr/local/etc/nginx/nginx.conf を編集。基本的には既存のサイトのコピペと server_nameproxy_path の変更のみ

  5. リバースプロキシを再開 # service nginx restart

重要なのは、2.で-dオプションにて、登録済みのものも含め使用するすべてのドメインを指定すること。つまり、自分の場合はサブドメインなしの ktjdragon.com を元々使用していたのでこれも忘れずに指定した。

コメント(0)



Note

本サイトのハイパーリンクの一部は、オリジナルのサイトが閉鎖してしまったため"Internet archive Wayback Machine"へのリンクとなっています。そのようなリンクにはアイコン[archive]を付与しています。

本サイトはCookieを使用しています。本サイトにおけるCookieは以下の三種類のみであり、Cookieの内容に基づいてサイトの表示を変更する以外の用途には用いておりません。