iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 29
1
Software Development

30天開發與部署 Laravel 專案系列 第 29

透過 HTTP/HTTPS +域名,連線至GCE專案

前言

每次都叫人用IP連線到專案這種作法很怪,甚至有資安問題(直接暴露位置給外人)。
因此提供一個網域名稱(域名、Domain Name)給外部使用者連線,是比較推薦的作法。

提供完整網域名稱(Fully Qualified Domain Name,FQDN ),例如 www.google.com 。一般使用者如何透過 FQDN 就能連線上?其實網址是要找管理網址的伺服器進行註冊的,若不註冊,空有網址也無法連線成功。

因此讓專案具有 DNS(Domain Name System,網域名稱系統)的服務,讓IP與domain name能銜接上,才能讓外部使用者正常使用專案的註冊、登入...等等功能。

因為我們透過GCP compute engine的服務,已經取得IP。接下來會逐步解釋如何透過HTTP/HTTPS 域名連線至專案。

先申請 Domain Name

線上有許多購買 Domain Name 的供應商,例如 GoDaddy 、Bluehost、eNom.com、DomainDiscount24、
gandi、捕夢網等,甚至用Hinet也有提供類似服務。

身為免費仔,推薦可以使用 Freenom https://www.freenom.com/ 或 noip https://www.noip.com/

本篇將以 Freenom 為範例,只要自行在輸入匡填寫自己想要 domain name,freenom就會告訴你還有哪些網域可以使用,除了有五個免費之外,還有付費的選項。

https://ithelp.ithome.com.tw/upload/images/20201014/201252637wI984ALa2.png


Web Server設定

server name

這專案的 web server是 Nginx,因此要從 Nginx的設定檔下手,設定server name = 剛申請好的domain name。

vim /etc/nginx/sites-available/default

 server_name k88d02.ml;  

修改完畢後用nginx -t 確認一下再重啟 Nginx

防火牆

記得開443 port


DNS設定

取得 domain name 之後,要怎麼IP連結?

方法1 透過GCP

Cloud DNS

在 GCP 「網路服務」這功能中,提供 Cloud DNS 建立區域的功能。

自行建立一個區域後, GCP Cloud DNS 預設提供 SOA跟 NS的設定值,我們須自行設定A跟CName的部分。

https://ithelp.ithome.com.tw/upload/images/20201014/20125263YbI1K3V8KN.png

  • A:address,回傳網域名稱所對應的 IP 位址。
  • CNAME:Canonical Name,正準名稱記錄。

freenom 也得進行設定nameservers

把 Cloud DNS 4個NS設定值帶入。
https://ithelp.ithome.com.tw/upload/images/20201014/201252631FI8kCDTV6.png

用ping確認一下

ping -c4 k88d02.ml

https://ithelp.ithome.com.tw/upload/images/20201014/20125263r4OQibWeEU.png

確認 domain name後的(IP)跟 GCE外部IP一致就表示成功囉。

方法2 domain name的供應商有無DNS服務

freenom其實有提供DNS,進入設定後最右方有個「Manage Freenom DNS」,進去設定 A與 Cname 。

https://ithelp.ithome.com.tw/upload/images/20201014/20125263h3zS4Y5wFH.png

Nameserver改為預設的,效果如同方法1。可以透過 HTTP + Domain Name連線至專案當中。


HTTPS 與 SSL 加密

HTTPS 跟 HTTP 相比,多了一個「S」。這個S背後運作機制就是SSL,Secure Sockets Layer,表示連線網站是安全的 HTTPS (HTTP Secure)。

SSL的六個加密步驟,建議可以看這篇教學文
我個人的理解是要證明一個網站是有人管理的安全機制,非隱藏身份的釣魚網站連線。

SSL加密也有許多付費跟免費的選項,個人是推薦 Let's Encrypt and Certbot 這套免費的SSL加密服務,而且在 Nginx跑起來非常快速(相較於Apache)。

透過certbot建立https

選擇專案建立環境 https://certbot.eff.org/lets-encrypt/ubuntufocal-nginx

sudo apt-get update 更新apt

sudo apt-get install certbot python3-certbot-nginx 安裝certbot套件

sudo certbot --nginx 開始安裝 certbot
- 跑安裝前需要先在 Nginx 設定檔有server name
- 填入聯繫用的email,certbot會提醒SSL憑證快到期。
- 安裝成功後,開啟專案domain name即可觀看成果。
- 安裝成功後,nginx的設定檔有被certbot改寫過
- vim /etc/nginx/sites-available default 添加了 443 ssl 相關設定。

確認SSL憑證有沒有過

查看網址列前方有無鎖頭符號

https://ithelp.ithome.com.tw/upload/images/20201014/20125263NMYcG9qDAI.png

檢查工具

https://www.ssllabs.com/ssltest/

透過 ssllabs可以查看許多測試數據是否需加強。
https://ithelp.ithome.com.tw/upload/images/20201014/20125263GaW2ZunJW6.png

HTTPS透過 session key 加密所有瀏覽器與網站之間傳輸資料,相對來說AP溝通時的傳輸安性也會有些許的提升。


參考資料
https://medium.com/@its_okay/%E6%90%9E%E6%87%82-ip-fqdn-dns-name-server-%E9%BC%A0%E5%B9%B4%E5%85%A8%E9%A6%AC%E9%90%B5%E4%BA%BA%E6%8C%91%E6%88%B0-05-aa60f45496fb
https://pjchender.github.io/2018/06/06/%E7%B6%B2%E9%9A%9B%E7%B6%B2%E8%B7%AF-%E8%AA%8D%E8%AD%98%E7%B6%B2%E5%9D%80%E8%88%87%E7%B6%B2%E5%9F%9F%E5%90%8D%E7%A8%B1%EF%BC%88domain-name-url-dns%EF%BC%89/
https://zh.wikipedia.org/wiki/%E5%9F%9F%E5%90%8D%E7%B3%BB%E7%BB%9F
https://www.youtube.com/watch?v=OKvOvHuOnrw&feature=emb_title
https://tw.alphacamp.co/blog/http-https-difference
https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-20-04
https://www.ichiayi.com/wiki/tech/ssl_letsencrypt
https://medium.com/@jinghua.shih/security-ssl-https-%E8%83%8C%E5%BE%8C%E7%9A%84%E5%8A%9F%E8%87%A3-df714e4df77b


上一篇
遠端連線 GCE 的 MySQL 資料庫
下一篇
虛擬機 Vagrant
系列文
30天開發與部署 Laravel 專案30

尚未有邦友留言

立即登入留言