(整理) Flask + Nginx 詳細OpenSSL設定方法

LUFOR129
May 15, 2019

只要是使用github page 的人一定遇過。會想把前端放在github page,但想把後端放在伺服器上。github page此時會告訴你,我們github page不允許http的api連進來,只好付錢買Azure或放在免費的Heroku上。然而免費的Heroku又不能操作資料庫、要是長時間不使用又會進入睡眠,不是很方便。因此我們要來學習在自己的伺服器上架上https網域。

環境: ubuntu 16.04 + Nginx + Flask (Node.js)也行

一、申請網域

首先我們要先申請一個網域,網域大部分是要花錢買的。但其實,只要你是中華民國國民或是你是交大的學生,你可以在申請免費的網域:

一個人一備子能夠免費申請三次網域,申請是需要實名驗證需要花一些時間,申請完後可以看到:

進入DNS管理修改,更新自己主機的IPv4

[更新] NCTU.me已經關閉

[替代方案]

如果你是學生,你可以在github student pack中免費獲得一年的domain

完成學生確認後,連結github帳號與namecheap

輸入自己想要得domain來完成購買,我記得是要先完成一系列註冊啦~

完成註冊並取得你的domain後進入你的namecheap domain list。點擊advanced domain。並新增兩個host records,皆為A等級,並輸入你的伺服器IP,如下圖:

設定完成後,當你連上你的domain (例如我是 lufor129.me)後,在Internet中就能回傳你設定的IP位置。詳細跳轉原理建議去看DNS原理。但是光是跳轉也沒有用,我們還要確保https連線,因此有了下面的openssl。

二、安裝 Nginx 與openssl

nginx是服務器內轉跳的web server,openssl是幫你註冊https協定的東西。

sudo apt-get install nginx
sudo apt-get install openssl

就這樣,沒甚麼好講的。

三、透過Certbot 將本台主機與剛剛申請的網域連結

進入這個網站: https://certbot.eff.org/ 選擇你的web server與系統。

選擇完後底下應該會跳出安裝程序,別懷疑照者走就好,例如我是:

輸入完畢後,輸入這個指令:

sudo certbot -d <你的網域>

他會提示問你要不要將所有的伺服器訪問都變成https,選擇要。

如果都正確,那他就會提示congratulations!!!

接著輸入,選擇你的網域

sudo certbot --nginx

他會要求你輸入一個網域給他核可,輸入剛剛在交大申請的網域。等他審核完畢後會出現Congratulations! 代表成功了。

[更新]

由於我交大那個domain失效了,而我透過NameCheap註冊了一個新domain,所以他會要你選擇要使用哪個當作domain

接下來問你有了新domain後要不要直接重新設定過去設定,我選要!

然後他再次問你要不要將訪問這台伺服器全部https加密,我一樣選要。

進入/etc/nginx/site-available/default,你會發現最後面出現了你剛剛註冊的網域設定檔

現在測試一下能不能用剛剛申請的網域進入ngnix預設的網站了,如果可以代表成功了。

四、 nginx 重新導向

現在進入網域是ngnix 預設網頁,我們要重新導向到我們寫的Flask or Node.js 程式中。

進入 /var/www/html 中建立你的Flask程式,因為是範例,我隨便建。

######!!!! index.py in  /var/www/html !!!#####
from flask import Flask
app = Flask(__name__)@app.route('/hello')
def helloIndex():
return 'Hello World from Python Flask!'
@app.route("/")
def index():
return "hello world"
@app.route("/",methods=['POST'])
def postindex():
return "post hello world"
app.run(host='0.0.0.0', port= 5000)

建立時host 為localhost即可,我們的目的是連到網域時重新導向到index.py。

進入 /etc/nginx/sites-availables/ 可以看到一個default的文件那個就是nginx的文件,這個檔案分成上下兩層,上層是default conf也就是設定原始IP(140.XXX…)的導向,下層是virtual Host Configuration,修改https導向。所以我們要修改下層。

依照需求修改 資料夾目錄、文件名稱、域名、重新導向,關於Nginx的重新導向設定,可以看這篇文章: http://bigpxuan.blogspot.com/2018/07/nginx-server-location.html

儲存完畢後重新整理Nginx設定,指令:

sudo nginx -s reload

全部都設定完成後可以開啟Flask Server 並打開瀏覽器試試看是不是成功了。

如此一來就可以實現github page前後端分離了。

如果單個Nginx 要代理多個Flask 則需要用到rewrite可以參考這篇文章:

--

--