WebGIS開發教程(二)Nginx 部署及配置
關於作者:GIS從業者,主要在ArcGIS平台下做WebGIS開發,最後有作者的聯繫方式
版權所有:轉載請保留作者名和原始鏈接
一點前言
Nginx 是一個很強大的高性能 Web 和反向代理伺服器,它在很多方面都具有非常優越的特性,例如並發數、復載均衡、集群等等
Nginx 的常用配置非常簡單明了,實際工作中用的最多的是反向代理,如果能夠靈活使用,會給開發和部署工作帶來巨大的便利
本篇既是一個入門教程,也會被當成一個總結和記錄 nginx 使用經驗的地方,隨著對 nginx 使用的深入,後續會不斷在本篇中補充新的內容
各位同學如果在使用 nginx 過程中遇到問題,也可在本篇後面留言討論
注意
本篇內容的測試環境為 Windows 系統, Mac 和 Linux 系統在個別地方會有所不同,請自行調整
編寫時官方最新版本 ,如無特殊說明,下文中均使用該版本
下面是正文下載、部署、啟動
官網下載頁 下載 nginx/Windows-1.13.8 安裝包
打開壓縮包,將裡面的 nginx-1.13.8 文件夾解壓到硬碟,最好是純英文路徑,以免出問題
打開命令行窗口,進入 nginx-1.13.8 文件夾,執行下面的語句啟動Nginx
正常情況命令行並不會返回任何信息,但在任務管理器中,我們可以找到名為 nginx.exe 的進程。請確定當前80埠未被其他伺服器軟體佔用,如被佔用請關閉佔用埠的伺服器軟體或參考下文修改 nginx 的監聽埠
在瀏覽器訪問 http://localhost 頁面,就能看到 nginx 的歡迎頁面了
Nginx歡迎頁面
是不是很簡單很暢快~
重啟和關閉
下文中我們將不斷修改 nginx 的配置文件,修改配置文件後需要重啟才會讓更改後的配置生效,仍然要在命令行窗口 nginx-1.13.8 文件夾中執行下面的命令
如果配置文件中存在錯誤,執行重啟命令會失敗,並返回錯誤信息和位置,根據信息仔細檢查配置文件,修改後重新執行重啟命令即可
如下圖是刪除了 nginx-1.13.8conf
ginx.conf 文件中的一個分號導致出錯
想要手動關閉 nginx ,執行如下命令,或者暴力一點直接 kill 掉 nginx.exe 進程
基礎配置項
nginx 中最常修改的配置文件是 nginx-1.13.8conf
ginx.conf 文件,下文無特殊說明時,各個配置項的修改都是在這個文件中進行的(說實話,我從未改過其他文件,也沒研究過那些文件是做什麼的~)
一個基礎 nginx 配置是如下結構
這一段配置是直接可用的,訪問 http://localhost 時,nginx 將在 nginx-1.13.8html 文件夾( location 中的 root 指定的)中查找資源,默認請求 index.html 文件( location 中的 index 指定的),這就是上面我們看到的那個歡迎頁面
一個配置文件中有且僅能有一個 http 配置塊,http 配置塊中可以有多個 server 配置塊,server 配置塊中 listen 定義了監聽埠,改成其他非80埠後重啟即可生效。 server_name 定義了域名
不同的 server 配置塊中 listen 項和 server_name 項可以相同也可以不同, server_name 還可以設置為正則表達式,這使得我們可以在一個 nginx 實例中監聽多個埠,而且每個埠上還可以指定不同域名。有時我們可能需要在一台伺服器的80埠上部署處於不同域名的多個網站,配置起來非常方便
強烈建議瀏覽一下下面的兩篇文章,對 server_name 的配置方式有個整體認識,這套按序匹配和正則表達式的機制在 nginx 的多個配置項中都能使用
nginx學習(十)——nginx的配置系統6之server_name
關於Nginx的server_name
虛擬目錄
一般情況下,我們可以把想要部署的資源複製到 文件夾中,例如放一個圖片文件,其物理路徑為 ,這時可以通過 訪問這個圖片
我們的 ArcGIS API for JavaScript 就可以按這種方式部署到 html 文件夾中
但很多時候我們要部署的資源並不是都能很容易的複製到 nginx 的目錄中,這時就要為這個資源配置虛擬目錄。一個server配置塊中可以有多個 location 配置塊,每個 location 就相當於一個虛擬目錄。
假設在 D 盤有一個資源目錄,路徑是這樣的 ,裡面有個文件路徑為 ,我們可以像下面這樣配置來訪問這個圖片
第二個 location 後的 就是我們指定的虛擬目錄,如果對80埠的訪問 url 中包含 ,那麼 nginx 就會去 指定的物理路徑中查找資源
所以此時,圖片的訪問地址應該是
這裡要注意的是 Windows 系統中,物理路徑的 需要寫成 。這個物理路徑也可以設置成相對於 nginx 目錄的路徑,例如與 nginx-1.13.8 文件夾同級有一個名為 assets 的文件夾,這個文件夾可以用 指定
location 後面的路徑也可以寫成正則表達式,而且多個 location 也是按順序匹配,匹配成功就立刻停止。這與
server 塊中的 server_name 的寫法及匹配機制是一樣的
反向代理
反向代理是 nginx 最實用的功能,我最初選擇使用 nginx 就是為了用反向代理解決跨域問題。靈活使用反向代理功能能讓一個龐大系統的各個部分更容易集成,各子系統的實現技術選擇更靈活,在開發中也能帶來很大的便利
看一下下面這段配置
這一段增加了一個 虛擬目錄,瀏覽器訪問 地址時,nginx 將用這一段的配置進行處理。proxy_pass 指定了 ,意思是所有被匹配到的請求都相當於在請求 。這背後實際是 nginx 先去請求了 http://nginx.org/index.html ,然後將得到的結果返回給訪問 http://localhost/nginx_proxy/index.html 的瀏覽器。這就是反向代理。
可以繼續嘗試一下訪問 http://localhost/nginx_proxy/en/download.html ,實際上我們得到的頁面是 http://nginx.org/en/download.html
有時候為了避免用於反向代理的虛擬目錄名稱與實際目錄結構中的文件夾重名,會給所有反向代理一個統一的虛擬目錄
例如下面這個配置
此時可以通過 http://localhost/proxy/nginx/ 來訪問 nginx 的官網主頁
rewrite 配置項實際是在改寫瀏覽器請求的地址,並將改寫後的地址拼接到 指定的地址的後面。在這個配置中,就是把 去掉。這裡需要寫一個正則表達式,如何寫還是各位同學多多試驗、自行體會吧
現在我參與的項目基本都會在頂層部署 nginx ,然後將網站和靜態資源部署在 nginx 中,反向代理 Tomcat 中的 Java 後台、NodeJS 後台、ArcGIS 服務、第三方服務等等,各子系統及後台會通過配置反向代理和虛擬目錄的方式與主系統處於同一域之下,以此解決用戶許可權集成的問題
Issues
TAG:幻想GIS |