Https 的設定其實也不是說非常必要,但每次進自己網站就看到一個紅色的不安全掛在那邊,看著看著渾身就不舒適了起來,所以就來研究看看要怎麼掛上憑證。
首先先到 SSL for Free 申請憑證,基本上照著步驟做、驗證信箱就可以。免費版最多可以申請三個網域,如果要 wildcard (包含所有子網域)的話就得要付費了。另外免費版必須要三個月更新一次憑證。
申請成功之後會取得金鑰的檔案,第一件事情當然就是要放到主機裡面:
scp -r ~/sample user@ip:/tmp
如果是 nginx,需要執行以下指令將憑證合併在一起:
cat certificate.crt ca_bundle.crt > certificate.merge.crt
記得要將憑證檔案放到 docker 映射的資料夾裡面。
nginx
接著修改 nginx 的設定檔,如果進到 http (80 port),會重導向到 443,並且加入 SSL 的設定,敬請注意 domain-b nginx 也一樣要加上憑證的設定,否則會有不安全連線或是憑證錯誤的提示。
server { listen 443 ssl; server_name domain.tw; root /usr/share/nginx/html; ssl on; ssl_certificate /etc/nginx/ssl/certificate.merge.crt; ssl_certificate_key /etc/nginx/ssl/private.key; // 下略各種設定 } server { listen 80; server_name domain.tw; return 301 https://$server_name$request_uri; } #domain-B server { listen 443 ssl; server_name domain-b.domain.tw; ssl on; ssl_certificate /etc/nginx/ssl/certificate.merge.crt; ssl_certificate_key /etc/nginx/ssl/private.key; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_pass https://{hostIP}:8001; } } server { listen 80; server_name domain-b.domain.tw; return 301 https://$server_name$request_uri; }
apache
由於 wordpress 的部分是使用 apache,在 apache 的設定檔中加上 SSL 的方式如下:
000-default.conf
<VirtualHost *:80> ServerName domain-c.domain.tw ServerAdmin admin@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> <IfModule mod_ssl.c> <VirtualHost *:443> SSLEngine on SSLCertificateFile /etc/ssl/certificate.crt SSLCertificateKeyFile /etc/ssl/private/private.key SSLCertificateChainFile /etc/ssl/ca_bundle.crt ServerName domain-c.domain.tw ServerAdmin admin@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> </IfModule>
default-ssl.conf
<VirtualHost *:443> DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on ServerName domain-c.domain.tw SSLCertificateFile /etc/ssl/certificate.crt SSLCertificateKeyFile /etc/ssl/private/private.key SSLCertificateChainFile /etc/ssl/ca_bundle.crt <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> </VirtualHost>
最重要的一步,進入 container,並執行:
a2enmod ssl
完成之後重新啟動機器即可套用設定。
參考資料:
- SSL For Free 免費 SSL 憑證申請,使用 Let’s Encrypt 最簡單方法教學!
https://free.com.tw/ssl-for-free/