Nginx可以用於搭建靜態網站,也可以實現反向 Proxy(將用戶端的請求轉寄到其他後端應用)。本文將指引您使用SAE部署Nginx服務。
方案概覽
如下圖所示,Nginx能夠根據用戶端請求的路徑,返回應用自身包含的靜態資源(如HTML頁面),或者將請求轉寄到其他後端應用,並將處理結果返回給用戶端。
如果您期望僅搭建靜態網站,也可以通過部署Nginx服務來實現。這種情況下,您無需部署後端應用,Nginx配置中也無需包含轉寄規則。
1. 準備靜態網站資源
本文使用以下樣本檔案:nginx-demo.zip。
其中,html/路徑下包含本例中使用的靜態網站資源:
index.html:預設首頁。error.html:預設404錯誤頁面。
實際環境中,請根據您的需求建立靜態網站資源(如HTML頁面、圖片、CSS樣式等)。
2. 編寫Nginx設定檔
樣本中的conf/路徑下包含Nginx的設定檔nginx.conf,相關說明如下。
實際環境中,請根據您的需求修改Nginx設定檔。更多資訊,請參考Nginx官方文檔。
配置靜態資源訪問規則
...
server {
listen 80 default_server; # 設定Web服務的監聽連接埠為80
...
root /usr/share/nginx/html;
include /etc/nginx/default.d/*.conf;
# 用戶端訪問根路徑時需要返回的頁面
location / {
root /usr/share/nginx/html; # 容器中存放靜態網站資源的路徑。製作鏡像時會將本地的靜態網站資源複製到鏡像內的這個路徑中。
index index.html;
}
# 用戶端訪問出現404錯誤時需要返回的頁面
error_page 404 /error.html;
location = /error.html {
root /usr/share/nginx/html;
}
}
...配置轉寄規則
本文假定您已部署後端應用,並可以從公網訪問後端應用。
樣本中,後端應用的訪問地址和連接埠是121.40.xx.xx:80,期望將請求路徑匹配/api/*的請求轉寄到後端應用,並且轉寄時將請求路徑重新導向為/*,則配置如下:
...
# 配置請求轉寄規則
location /api/ {
proxy_pass http://121.40.xx.xx:80/;
}
...如果您期望僅搭建靜態網站,則無需配置轉寄規則。
如果部署後的Nginx服務可以通過VPC網路訪問到後端應用,則轉寄規則中可以使用私網IP。
3. 製作鏡像並上傳到鏡像倉庫
您可以在本地環境或ECS環境中製作鏡像,前提是環境中已安裝Docker工具。
編寫Dockerfile檔案。樣本中Dockerfile檔案的說明如下:
# 指定Nginx基礎鏡像 FROM nginx:1.20.2 # 複製本地的Nginx設定檔到容器環境的指定路徑 COPY conf/nginx.conf /etc/nginx/nginx.conf # 複製本地的靜態資源檔案到容器環境的指定路徑 COPY html /usr/share/nginx/html構建鏡像。在Dockerfile檔案所在路徑執行以下命令:
docker build . -t my-nginx:1.0 # .:表示在目前的目錄中構建鏡像 # -t:指定鏡像名稱、鏡像tag測試鏡像。
# 運行鏡像 docker run -d -p 80:80 my-nginx:1.0 # 需要環境中已安裝curl命令 # 測試靜態資源訪問 curl localhost:80/ # 測試將請求轉寄到後端應用(僅適用於Nginx服務通過公網IP轉寄到後端應用的情境) curl localhost:80/api/將製作成功的鏡像推送至阿里雲ACR鏡像倉庫。具體操作,請參考推送拉取鏡像(企業版)或推送拉取鏡像(個人版)。
4. 通過鏡像部署Nginx並配置網路訪問
通過已推送到ACR中的鏡像部署Nginx服務。具體操作,請參考使用鏡像部署應用。
如果希望Nginx服務能夠將請求轉寄到後端應用的公網地址,需要為Nginx服務所在的VPC配置NAT Gateway(預設情況下,部署在SAE的應用是無法訪問公網的)。具體操作,請參考配置公網NAT Gateway使SAE應用能訪問公網。
如果Nginx服務轉寄請求時使用後端應用的私網地址,則無需配置NAT Gateway。
為Nginx服務配置公網訪問地址,使用戶端可以通過公網IP訪問Nginx服務。具體操作,請參考為應用綁定CLB並產生應用的公網或私網訪問IP,容器連接埠需要設定為
80。如果您希望用戶端通過網域名稱訪問Nginx服務,則需要為公網IP佈建網域名解析。
通過瀏覽器訪問Nginx服務,進行測試。
5. (可選)應用部署後修改Nginx設定檔
修改Nginx設定檔無需重新構建鏡像,您可以通過ConfigMap向容器中注入設定檔的方式實現組態管理,提高效率。
通過ConfigMap注入到容器中的設定檔會覆蓋容器中的原始設定檔。
在Nginx應用所在的命名空間中建立配置項(ConfigMap)。具體操作,請參考建立配置項(ConfigMap),配置項名稱設定為
nginx,添加變數nginx.conf(即Nginx設定檔名),變數的值為修改後的設定檔內容。
通過ConfigMap注入設定檔,並重新部署應用。具體操作,請參考注入配置資訊。配置項選擇上一步中建立的
nginx,鍵選擇nginx.conf,掛載路徑設定為/etc/nginx/nginx.conf(即鏡像中Nginx設定檔的路徑)。
應用部署成功後,可以通過Webshell登入到具體的應用執行個體中,查看設定檔是否修改成功。
