nginx 提供各種各樣的服務器功能,本文記錄 nginx 最基礎的操作:
開啟、停止、重載配置
靜態(tài)文件服務器
反向代理
本文操作系統(tǒng)環(huán)境為 ubuntu18
sudo nginx # 開啟sudo nginx -s stop # 快速停止sudo nginx -s quit # 優(yōu)雅停止sudo nginx -s reload # 重載配置
停止 nginx 運行有兩種方式,區(qū)別在于,“快速停止”會立刻停止 nginx;而 “優(yōu)雅停止” 會等待已收到請求處理完畢再退出。也就是說,如果現(xiàn)在發(fā)出優(yōu)雅停止命令,nginx 不會立刻停止運行,而是先看看,現(xiàn)在已收到的請求處理完沒有,如果有的話,就會等待已收到的請求處理完再退出,當然這種情況下,如果有新的請求,是不會處理的。
重載配置是在 nginx 運行期間改變 nginx 的“行為”,nginx 的行為定義在配置文件里,修改配置文件并保存后,這些配置不會立刻生效,必須重啟或者使用重載配置命令。
想讓 nginx 干什么事,要通過配置文件來說明,碼者當前使用的 ubuntu18,配置文件在 /etc/nginx/nginx.conf
為了不使接下來的配置受老配置或者默認配置的影響,碼者建議刪除這個配置文件的所有內(nèi)容,從零開始。(生產(chǎn)環(huán)境慎用)
比如我想把home/gy/static
這個目錄下的文件作為靜態(tài)文件供別人訪問,我可以這么做
創(chuàng)建目錄 home/gy/static
,并在這個目錄里放一個圖片或者html文件(這里我先放一個 test.html)
告訴 nginx,我的靜態(tài)文件放在 /home/gy/static
目錄下。也就是,修改配置文件為以下內(nèi)容:
events {}http { server { root /home/gy/static; }}
重載配置sudo nginx -s reload
試一下,在瀏覽器里訪問localhost/static/test.html
。
如果使用遠程主機,應該用 ip 地址替換 localhost,如果 404 了,檢查一下防火墻 80 端口和云服務器安全組規(guī)則
對于任何功能強大、可定制性強的工具,其配置文件一般都非常復雜,完全理解配置文件是需要花費巨大精力且沒有必要的。大多數(shù)情況下,我們只需要根據(jù)我們自己的需求去了解部分功能的配置,所以重要的不是為什么(比如:為什么第一行必須有一個 events?),而是怎么辦(比如:我需要做哪些事才能配置一個靜態(tài)文件服務器)。
第一行 events {}
定義一些事件相關的內(nèi)容,本文不涉及,所以 events 里沒有任何內(nèi)容,但是如果沒有這一行代碼的話,這個配置就不完整,是不可以被使用的,所以加了這么一行配置
第二行到最后,用來定義 “http 相關的” -> “服務器內(nèi)容”,這里只需要指定一個服務器的根目錄就行
通常情況下靜態(tài)文件服務器只提供文件的獲取,但是 nginx 提供了類似 web文件瀏覽器 的功能,就是可以訪問一個目錄,結果就是得到這個目錄下有哪些文件、文件夾,如下圖
只需要在 root 下一行添加autoindex on;
就可以了。如果當前的 nginx 只是用來托管一個靜態(tài)網(wǎng)站或者圖片,那么這個功能是不需要的。
修改配置后記得重載配置
關于代理和反向代理的意義,建議看這個例子
為什么需要反向代理呢?當然,有無數(shù)需要反向代理的情況。比較常見的一種情況是:多個 web 應用部署在同一個服務器上,而這些 web 應用都需要 80 端口。這時候,我們需要用 nginx 來導流,把以 /a 開頭的請求轉發(fā)到 a 應用里,把以 /b 開頭的請求轉發(fā)到 b 應用里
events {}http { server { location /a { proxy_pass http://localhost:8081; } location /b { proxy_pass http://localhost:8082; } }}
這時,請求 http://localhost/a/resource
就會轉發(fā)到