2020-11-01

nginx + nodejs 使用 certbot

nginx + nodejs 使用 certbot

以下的設定參考 教學-申請Let’s Encrypt憑證與啟用https

承上篇,在 nginx 設定中加入一個 server /etc/nginx/sites-enabled/www.shinder.cc,並設定為:

server { listen 80; server_name www.shinder.cc shinder.cc; location / { proxy_pass http://127.0.0.1:3000; proxy_http_version 1.1; proxy_set_header Host $host; } }

啟動 node/express server,使用 port 3000。 然後測試 http://www.shinder.cc 是否可以看到 node/express 的執行內容。 安裝 certbot:

# 先加入 certbot 的 repo 資料 sudo add-apt-repository ppa:certbot/certbot # 更新 repo 並安裝 sudo apt update sudo apt install certbot

申請憑證:

sudo certbot certonly --webroot --webroot-path=/home/ubuntu/<express專案>/public/ -d www.shinder.cc -d shinder.cc

接著會有幾個詢問, email,是否同意授權,email是否要接收訊息等等。最後就是 key 所放的位置:

/etc/letsencrypt/live/www.shinder.cc/fullchain.pem /etc/letsencrypt/live/www.shinder.cc/privkey.pem

為了增加安全性產生一個2048-bit Diffie-Hellman的密碼組合:產生的 /etc/ssl/certs/dhparam.pem 之後會用到:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

更改 nginx 設定

建立設定檔 /etc/nginx/snippets/ssl-www.shinder.cc.conf

ssl_certificate /etc/letsencrypt/live/www.shinder.cc/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.shinder.cc/privkey.pem;

建立另一個設定檔 /etc/nginx/snippets/ssl-params.conf

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; ssl_ecdh_curve secp384r1; ssl_session_cache shared:SSL:10m; ssl_session_tickets off; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s; add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff; ssl_dhparam /etc/ssl/certs/dhparam.pem;

最後修改 nginx 設定檔 /etc/nginx/sites-enabled/www.shinder.cc

server { listen 443 ssl http2; listen [::]:443 ssl http2; include snippets/ssl-www.shinder.cc.conf; include snippets/ssl-params.conf; server_name www.shinder.cc shinder.cc; client_max_body_size 1G; location / { proxy_pass http://127.0.0.1:3000; proxy_http_version 1.1; proxy_set_header Host $host; } } server { listen 80; server_name www.shinder.cc shinder.cc; return 301 https://$server_name$request_uri; }

nginx 重新載入設定就可以測試 https 了。

自動更新憑證

使用 crontab 排程:

# 進入編輯 sudo crontab –e

加入下行,每日早上七點更新:

10 7 * * * /usr/bin/certbot renew --quiet --renew-hook "/bin/systemctl reload nginx"

如果 web document root 變更了,可以在 /etc/letsencrypt/renewal/www.shinder.cc.conf 檔案內修改 webroot_map 。

沒有留言:

FB 留言