Nginx如今幾乎是衆多大型網站的必用技術,你們應該都知道Nginx被F5收購的大事件,章亦春也在專心維護OpenResty項目構建和諧家園,不管你選擇Nginx仍是OpenResty,都須要對Nginx有一個比較全面的瞭解,往後才能作到事半功倍。本文以開發者必備的Nginx基礎知識爲主,在參考文章中羅列了目前比較優秀的Nginx和OpenResty參考教程,但願對你們有幫助。html
Nginx基礎知識從小白到入門
2019年11月12日 - 初稿前端
閱讀原文 - https://wsgzao.github.io/post...nginx
擴展閱讀git
nginx.orggithub
NGINX Plusweb
Nginx是什麼?
Nginx 是一個 web 服務器,主要處理客戶端和服務器的請求分發。api
特色和優點
使用和擴展
開源免費的Nginx與商業版Nginx Plus,與之對應的是免費OpenResty與商業版OpenRestybash
陶輝《深刻理解 Nginx》做者在極客時間上的講義PDF已經介紹的很是詳細了,若是以爲課程不錯能夠選擇購買儘可能少走彎路
極客時間:nginx核心知識100講配置文件與代碼分享服務器
爲了便於理解,首先先來了解一下一些基礎知識,nginx是一個高性能的反向代理服務器那麼什麼是反向代理呢?
代理是在服務器和客戶端之間假設的一層服務器,代理將接收客戶端的請求並將它轉發給服務器,而後將服務端的響應轉發給客戶端。
不論是正向代理仍是反向代理,實現的都是上面的功能。
若是你對OSI 七層模型與 TCP/IP 四層模型不是很熟悉能夠再回顧下
正向代理
正向代理(forward)意思是一個位於客戶端和原始服務器 (origin server) 之間的服務器,爲了從原始服務器取得內容,客戶端向代理髮送一個請求並指定目標 (原始服務器),而後代理向原始服務器轉交請求並將得到的內容返回給客戶端。
正向代理是爲咱們服務的,即爲客戶端服務的,客戶端能夠根據正向代理訪問到它自己沒法訪問到的服務器資源。
正向代理對咱們是透明的,對服務端是非透明的,即服務端並不知道本身收到的是來自代理的訪問仍是來自真實客戶端的訪問。
反向代理
反向代理(Reverse Proxy)方式是指以代理服務器來接受 internet 上的鏈接請求,而後將請求轉發給內部網絡上的服務器,並將從服務器上獲得的結果返回給 internet 上請求鏈接的客戶端,此時代理服務器對外就表現爲一個反向代理服務器。
反向代理是爲服務端服務的,反向代理能夠幫助服務器接收來自客戶端的請求,幫助服務器作請求轉發,負載均衡等。
反向代理對服務端是透明的,對咱們是非透明的,即咱們並不知道本身訪問的是代理服務器,而服務器知道反向代理在爲他服務。
安裝nginx時一般須要編譯本身須要的模塊,能夠使用 rpmbuild 製做 Nginx 的 RPM 包
main # 全局配置 events { # nginx工做模式配置 } http { # http設置 .... server { # 服務器主機配置 .... location { # 路由配置 .... } location path { .... } location otherpath { .... } } server { .... location { .... } } upstream name { # 負載均衡配置 .... } }
若是想要生成nginx規範配置,能夠參考nginxconfig.io
下面是 nginx
一些配置中經常使用的內置全局變量,你能夠在配置的任何位置使用它們。
變量名 | 功能 |
---|---|
$host |
請求信息中的 Host ,若是請求中沒有 Host 行,則等於設置的服務器名 |
$request_method |
客戶端請求類型,如 GET 、POST |
$remote_addr |
客戶端的 IP 地址 |
$args |
請求中的參數 |
$content_length |
請求頭中的 Content-length 字段 |
$http_user_agent |
客戶端 agent 信息 |
$http_cookie |
客戶端 cookie 信息 |
$remote_addr |
客戶端的 IP 地址 |
$remote_port |
客戶端的端口 |
$server_protocol |
請求使用的協議,如 HTTP/1.0 、HTTP/1.1\ |
$server_addr |
服務器地址 |
$server_name |
服務器名稱 |
$server_port |
服務器的端口號 |
Upstream 指定後端服務器地址列表,在 server 中攔截響應請求,並將請求轉發到 Upstream 中配置的服務器列表。
upstream balanceServer { server 10.1.22.33:12345; server 10.1.22.34:12345; server 10.1.22.35:12345; } server { server_name fe.server.com; listen 80; location /api { proxy_pass http://balanceServer; } }
上面的配置只是指定了 nginx 須要轉發的服務端列表,並無指定分配策略。
默認狀況下采用的是輪詢策略,將全部客戶端請求輪詢分配給服務端。這種策略是能夠正常工做的,可是若是其中某一臺服務器壓力太大,出現延遲,會影響全部分配在這臺服務器下的用戶。
# 快速關閉Nginx,可能不保存相關信息,並迅速終止web服務 nginx -s stop # 平穩關閉Nginx,保存相關信息,有安排的結束web服務 nginx -s quit # 因改變了Nginx相關配置,須要從新加載配置而重載 nginx -s reload # 從新打開日誌文件 nginx -s reopen # 爲 Nginx 指定一個配置文件,來代替缺省的 nginx -c filename # 不運行,而僅僅測試配置文件。nginx 將檢查配置文件的語法的正確性,並嘗試打開配置文件中所引用到的文件 nginx -t # 顯示 nginx 的版本 nginx -v # 顯示 nginx 的版本,編譯器版本和配置參數 nginx -V # 格式換顯示 nginx 配置參數 2>&1 nginx -V | xargs -n1 2>&1 nginx -V | xargs -n1 | grep lua
以上內容只是nginx的冰山一角,我我的推薦你們跟着官方文檔或者相似極客時間的教程學習,能夠少走不少彎路
如下爲極客時間專欄