サイトをFreeBSD11+python3.6+Bottleで作り直すメモ(12)-nginxとcertbotでリバースプロキシ
- 公開日: 2020/05/23(土) 14:27[JST]
- 更新日: 2023/01/14(土) 15:27[JST]
今日びの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.confにweekly_certbot_enable="YES"を追加する。
nginxの設定
@HeRo氏によるQiita: Let's Encrypt で Nginx にSSLを設定すると、久保達彦、道井俊介『nginx実践入門』(技術評論社)を参考にして、nginxの設定ファイル /usr/local/etc/nginx/nginx.conf の server { … } を以下のように設定した。
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アドレス;
}
}
やっていることは以下の通り。
これまでのURLである"http://www.ktjdragon.com/〜"は"https://ktjdragon.com/〜"にリダイレクト
"https://ktjdragon.com/〜"をBottleが動いているサーバにリバースプロキシ
(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対応に追加する」を参考にサブドメインを追加した。手順は以下の通り。
リバースプロキシを停止する(certbotがwwwのポートを使用するため) # service nginx stop
certbot --authenticator standalone --installer nginx --expand -d ktjdragon.com -d サブドメイン.ktjdragon.com を実行
登録されたことを示すメッセージを確認
/usr/local/etc/nginx/nginx.conf を編集。基本的には既存のサイトのコピペと server_name 、 proxy_path の変更のみ
リバースプロキシを再開 # service nginx restart
重要なのは、2.で-dオプションにて、登録済みのものも含め使用するすべてのドメインを指定すること。つまり、自分の場合はサブドメインなしの ktjdragon.com を元々使用していたのでこれも忘れずに指定した。
を付与しています。