nginx [engine x]是一個HTTP和反向代理服務器,一個郵件代理服務器和一個通用的TCP / UDP代理服務器,最初由Igor Sysoev編寫。很長一段時間以來,它一直在許多負載很重的俄羅斯網站上運行,包括 Yandex, Mail.Ru, VK和 Rambler。據Netcraft稱,nginx 在2019年6月服務或代理了 26.34%最繁忙的網站.html
基本的HTTP服務器功能、其餘HTTP服務器功能、郵件代理服務器功能nginx
下載地址web
我這裏下載的是Windows版本.正則表達式
解壓打開以下:後端
在Nginx目錄的搜索欄,敲入cmd數組
輸入命令start nginx便可啓動Nginx瀏覽器
在瀏覽器訪問 localhost:緩存
其餘的一些經常使用命令:服務器
nginx -s stop 快速關閉
nginx -s quit 優雅關閉
nginx -s reload 從新加載配置文件
nginx -s reopen 從新打開日誌文件架構
nginx的配置文件在/conf/nginx.conf,nginx由模塊組成,這些模塊由配置文件中指定的指令控制。指令分爲簡單指令和塊指令
一個簡單的指令由名稱和參數組成,用空格分隔,以分號(;)結尾。
塊指令與簡單指令具備相同的結構,但它不是以分號結尾,而是以大括號{}包圍的一組附加指令結束。若是塊指令在大括號內能夠有其餘指令,則稱爲上下文(示例: events, http, server和 location)。
"#" 表示註解
在/conf/ 目錄下,將原來的nginx.conf文件更名爲nginx.conf1,而且建立一個空白的nginx.conf文件
修改nginx.conf文件
##工做線程, 建議和cpu數量相同 worker_processes 4; #工做模式與鏈接數上限 events { #單個進程最大鏈接數(最大鏈接數=鏈接數*進程數) worker_connections 1024; } #設定http服務器 http { #虛擬主機的配置 server { #對 "/" 啓用反向代理 location / { # 制定靜態資源的位置 root D://web_resources//static//; } location /images/ { root D://web_resources//static//; } } }
本地圖片的路徑 : D:\web_resources\static\images\1.png
本地頁面的路徑: D:\web_resources\static\index.html
也就是所 root的路徑+ location後面的路徑 = 實際文件存放的文件夾路徑
訪問測試:
成功了有沒有.
nginx的一個常見用途是將其設置爲代理服務器,這意味着服務器接收請求,將它們傳遞給代理服務器,從中檢索響應,而後將它們發送給客戶端。
接下來作一個簡單的動靜分離的例子, 靜態資源訪問指向本地目錄,動態資源代理本地的一個8080端口的web服務.
修改nginx.conf文件
http { server { location / { # 代理的地址 proxy_pass http://localhost:8080; } # 該參數是一個正則表達式匹配以gif,.jpg或.png結尾的URL #相應的請求將映射到該D://web_resources//static//; 目錄。 location ~ \.(gif|jpg|png|html)$ { root D://web_resources//static//; } } }
訪問8080端口的服務:
確實被轉發過去了.
訪問靜態資源:
除了動靜分離,Nginx的負載均衡也是經常使用的一個功能.
nginx支持如下負載平衡機制(或方法):
若是未特別配置負載平衡方法,則默認爲循環。
修改nginx.conf文件
http { #負載均衡 upstream myapp1 { server localhost:8080; server localhost:8081; server localhost:8082; } server { # nginx監聽的端口 listen 80; location / { proxy_pass http://myapp1; } } }
屢次請求頁面,請求均勻的負載在每一個服務上:
輸出語句的數量相同.
另外一個負載平衡規則是最少鏈接的。在某些請求須要更長時間才能完成的狀況下,最小鏈接容許更公平地控制應用程序實例上的負載。
使用最少鏈接的負載平衡,nginx將嘗試不會使繁忙的應用程序服務器超載請求過多,而是將新請求分發給不太繁忙的服務器。
當 least_conn指令用做服務器組配置的一部分時,將激活nginx中的最小鏈接負載平衡
#負載均衡 upstream myapp1 { # 最少鏈接負載均衡指令 least_conn; server localhost:8080; server localhost:8081; server localhost:8082; }
請注意,經過循環或最少鏈接的負載平衡,每一個後續客戶端的請求可能會分發到不一樣的服務器。沒法保證同一客戶端始終指向同一服務器。
若是須要將客戶端綁定到特定的應用程序服務器 - 換句話說,就始終嘗試選擇特定服務器而言,使客戶端的會話「粘滯」或「持久」 - ip-hash負載平衡機制能夠是用過的。
使用ip-hash,客戶端的IP地址將用做散列密鑰,以肯定應爲客戶端的請求選擇服務器組中的哪一個服務器。此方法可確保來自同一客戶端的請求始終定向到同一服務器,但此服務器不可用時除外。
配置方式和上面相似, 添加指令ip_hash:
#負載均衡 upstream myapp1 { # 最少鏈接負載均衡指令 ip_hash; server localhost:8080; server localhost:8081; server localhost:8082; }
在上面的示例中,未配置服務器權重,這意味着全部指定的服務器都被視爲對特定負載平衡方法具備同等資格。
當 爲服務器指定權重參數時, 權重被計入負載平衡決策的一部分。
修改配置文件:
upstream myapp1 { #upstream的負載均衡,weight是權重,能夠根據機器配置定義權重。weigth參數表示權值,權值越高被分配到的概率越大。 server localhost:8080 weight = 3; server localhost:8081; server localhost:8082; }
使用此配置,每5個新請求將分佈在應用程序實例中,以下所示:3個請求將定向到8080端口,一個請求將轉到8081端口,另外一個請求轉到8082端口。
兩個參數max_fails和fail_timeout,用於判斷後端節點狀態.
在fail_timeout的時間範圍內鏈接服務器通訊失敗的次數若是超過max_fail,那麼服務器被斷定爲不可用.而且再次等待一個fail_timeout的時間,再去從新嘗試請求.
fail_timeout的默認值爲30s,,max_fails的默認值爲1.
配置方式:
#負載均衡 upstream myapp1 { server localhost:8080 weight=3 max_fails=10 fail_timeout=30; server localhost:8081; server localhost:8082; }