怎麼建立一個 Https server?
如何架設一個 https server
最近 chatbot 聊天機器人很火紅,在 Facebook, Line, Slack, Telegram 上都能夠架設聊天機器人。我們只需要設定 callback url 就可以了。但是, 我們服務的 callback url 通常必須是 https,所以我想分享一下自己是怎麼架設 https server。
會使用到的伺服器軟體及要準備的東西:
- nginx
- domain name
- 一台擁有 public ip 的機器
流程
- 將 domain name 綁定到你機器的 ip 上
- 申請 ssl 憑證
- 設定 nginx, run service
將 domain name 綁定到 ip 上
首先,你得要先取得一個 domain name, 通常這個 domain name 是跟供應商買來的,常見的供應商有:
p.s domain name 購買的期限是以年為單位。
購買了一個 domain name 之後,藉由購買 domain name 的平台網站去管理 DNS,將 A record 的部分設定為你的機器 IP。大概過 3 - 5 分鐘後,就可以利用 domain name 去存取你的網頁服務。
如果你對 DNS 的設定有興趣可以看 這裡
以 Godaddy 為例:
申請 ssl 憑證
ssl 你可以跟供應商購買,GoDaddy, Namecheap 都有在賣。但是如果你跟我一樣窮的話只是單純想要嚐鮮的話,可以試試 Let’s Encrypt 的服務。他可以提供免費的 ssl 憑證,這個憑證有三個月的使用期限,等使用期限快到了再 renewal 就好了。
網路上關於 Let’s Encrypt 的教學都是比較舊版的,現在你只要使用他們提供的 Certbot 服務,按照他們的步驟執行就可以輕鬆取得 ssl 憑證。
首先選擇一下,你的 webserver 和 os 種類
依序執行
$ wget https://dl.eff.org/certbot-auto
$ chmod a+x certbot-auto
$ ./certbot-auto certonly
這時候會出現藍色的互動式介面,不要慌張,輸入你要填入的東西即可 :)
將所有東西輸入完畢之後,你就已經取得屬於該 domain name 的 ssl 憑證了,是不是很簡單呀?
那些憑證在 /etc/letsencrypt/live/domain/
下,你可以進入 /etc/letsencrtpy/renewal/
查看 屬於那個 domain name 的設定,這些會和 nginx ssl_certificate 的設定有關。
稍後設定 nginx 需要用到的是 fullchain.pem, privkey.pem
設定 nginx
接下來開始撰寫 nginx 的設定檔。這份設定檔位於 /etc/nginx/nginx.conf
利用 sudo vim /etc/nginx/nginx.conf
編輯它
基本上,要修改的東西不多,你只需要在 http block 加上這一段:
server {
root /usr/share/nginx/html;
index index.html index.htm;
listen 443 ssl; # 一般來說 https 服務的 port 是 443
server_name your.domain.name; # 這裏要修改變成你的 domain name
ssl on;
ssl_certificate 剛剛生成的 fullchain 憑證的位址;
ssl_certificate_key 剛剛生成 privkey 的位址;
location / {
proxy_pass http://localhost:8000; # 這是對應到你的 server port,這裡只示範簡易的測試方式。
}
}
設定好了之後,要如何檢驗了是否正確呢?
$ sudo service nginx configtest
如果顯示 ok 就可以開啟 nginx 的服務了
我們也可以利用 python simple http server 去測試設定的結果
$ python3 -m http.server
另外,nginx 還可以設定:
- ssl_protocols
- ssl_ciphers
- ssl_dhparams
- ssl header
後記
以上僅僅是最低限度的 https server, 但是可以確定用來架設你的 line bot
相關內容疑問歡迎討論 or 留言 :)
留言
張貼留言