在前面Docker於正式部署時,有稍微提到Nginx服務,因此想針對Nginx進行簡單介紹。Nginx是一個高速輕量化的網頁伺服器,架設在網站入口,主要任務是將網路流量分配到不同地方。根據網頁使用者所請求的是靜態檔案,如HTML、CSS、JavaScript或圖片等,或是請求後端API應用,如Django等,而轉送到不同位址處理。
Nginx因為效能高,佔用資源少,且可靈活配置,再加上他是開源服務,受到廣泛使用。
所使用基本的虛擬伺服器,組態設定,參考如下:
# prod.conf
# server區塊
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.html;
# location區塊
location / {
try_files $uri $uri/ /index.html;
}
location /api/ {
proxy_pass http://backend:8000/api/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
listen 80
將伺服器設置在port 80,server_name localhost
,伺服器名稱命名為本機伺服器。root
乃指定靜態檔案的根目錄,並且index
,指定預設的首頁檔案。location
區塊中,提供兩個位址
/
,並採用try_files
指令,當找不到檔案時,就回轉至index.html
,也就是交給前端路由處理。/api/
,此位址因路徑較長,將優先於/
被匹配,且接著以proxy_pass
指令,將請求轉發到後端伺服器。proxy_set_header
則是補充傳遞HTTP標頭,確保後端可以知道原始Host與訪客IP在這份組態設定,有運用到Nginx的反向代理服務。所謂的反向代理(reverse proxy),就是協助將請求轉送到後端伺服器,拿到回應後再回傳給前端。
所謂的反向,指的是在這個過程中,前端只知道是向Nginx請求,但看不到後端伺服器,因此可以做到把不同的服務,都整合在同一個網域,統一管理,而前面所設定的location /api/
就是在進行反向代理,即將所有的請求都集中交給/api/
位址處理,並由Nginx統一派發。
location /api/ {
proxy_pass http://backend:8000/api/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
proxy_pass
就是經由/api/
位址,發送到後端伺服器,取得回應後再回傳,以完成反向代理服務。location
及proxy_pass
皆有尾斜線/
,代表會將前綴/api/
去掉,因此當發送請求為localhost/api/employee
,實際上請求的路徑會是localhost/employee
。最後,當網頁正式部屬後,若僅想要進行展示,即需要將網站位址公開到外網,此時可嘗試Ngrok服務。Ngrok可以做到把內部服務安全地公開到外網,尤其若僅是想要短暫地測試或展示,是相當方便的工具。
針對Windows用戶,可以直接到Ngrok下載應用程式:ngrok Download,經過註冊後,即可在CMD介面輸入以下指令
ngrok http 80
之後Ngrok會提供一個臨時的對外公開網址,展示時直接連接該臨時網址,即可開始網頁展示。
http 80
,就是前面Nginx虛擬伺服器所設定的port,因此Ngrok對外公開的服務,就是位於自己本機所架設的Nginx網頁伺服器的位址,如此即可完成將內部服務安全地公開到外網的任務。