首頁 > 軟體

Nginx組態檔nginx.conf的基本設定範例詳解

2022-09-14 22:13:57

前言

對於Nginx首先要了解的是Nginx的作用和它的代理方式,Nginx的作用為負載均衡、代理方式為反向代理。

負載均衡平衡web伺服器叢集中轉發給各伺服器的請求數,防止出現伺服器因為處理請求壓力大或小導致記憶體溢位、宕機或資源浪費的情況發生。

反向代理對外暴露的地址是代理伺服器的地址隱藏了真實伺服器的地址,使用者端將請求傳送到代理伺服器上。由代理伺服器根據設定規則選擇真實伺服器處理請求,在獲得伺服器返回資料後再返回給使用者端。此時代理伺服器在外看來就是提供服務的伺服器,使用者端對代理是無感知的並不知道具體是哪臺伺服器處理的它的請求且不需要做任何設定。

正向代理:例如當因工需要,需要存取瀏覽器正常存取不到的伺服器時,此時要找到一個可以存取該伺服器的代理伺服器。使用者端將請求傳送給代理伺服器,代理伺服器去存取該伺服器,然後將存取到的資料返回給我們,這樣的代理模式稱為正向代理。正向代理時真實使用者端的資訊被遮蔽或者隱藏了,伺服器只清楚請求來自哪臺代理伺服器而不清楚來自哪個使用者端,但使用者端非常明確要存取的伺服器地址。

即:正向代理代理的是使用者端的請求,反向代理代理的是伺服器。

1. Nginx設定樣例

例如頁面請求地址為http://www.sayhi.com/products/pageManage,則在nginx.conf中設定server如下:

        server {
               listen 80;  #監聽80的伺服器埠
               server_name www.sayhi.com;  #監聽的域名
                location /{
                        root emstatic;
                        index index.html;
                }

                location /products {
                        proxy_pass http://127.0.0.1:8103/zuul-product/product/manage;
                        add_header 'Access-Control-Allow-Credentials' 'true';
                        add_header 'Access-Control-Allow-Origin' '*';
                }
        }

根據域名www.sayhi.com和字尾/products匹配到server中的server_name和location後,將剩餘url字尾/pageManage拼接到location中的設定項proxy_pass的url後通過閘道器存取伺服器資源。

所以存取http://www.sayhi.com/products/pageManage時經過nginx設定後實際存取的地址為http://127.0.0.1:8103/zuul-product/product/manage/pageManage。

2. Nginx負載均衡方式

2.1 輪詢

依次按照順序存取後端的每一個伺服器,按照這個計算,相當於平均分配請求給所有叢集節點-物理均衡。首先準備一個upstream的虛擬域名,保管後端伺服器的詳細資訊。

       upstream ouservers{
              server 127.0.0.1:8091;
              server 128.0.0.2:8092;
              server 129.0.0.3:8093;
       }

nginx啟動時載入成為一個記憶體的list物件元素有3個分別是8091 8092 8093,負載均衡的計算都是通過這個list完成的,在server中使用proxy_pass指向這個新建立的upstream名稱ouservers。

新增server案例

       server{
              listen 80;
              server_name www.ou.com;
              location / {
                     proxy_pass http://ouservers/;
              }
       }

在存取有多個使用者存取www.ou.com時會把請求輪詢轉給127.0.0.1:8091、128.0.0.2:8093和129.0.0.3:8093伺服器去處理。

2.2 權重

總是按照物理均衡分配並行有時候不滿足實際情況,按照情況通過佔用比例的分配均衡邏輯就是權重(權衡比重)。權重基於輪詢完成,可以在upstream的輪詢基礎上新增權重的關鍵字weight,權重值越高轉發的請求越多(引數為整數等於down表示該server不可存取)。

       upstream ouservers {
              #補充後端伺服器的ip:port-based
              server 127.0.0.1:8091 weight=10;
              server 128.0.0.2:8092 weight=5;
              server 129.0.0.3:8093 weight=1;
       }

2.3 Nginx解決叢集共用session問題的方案

在單節點程序中可以使用session屬性儲存一些資料。在一次對談中使用這些屬性如果是叢集中會產生問題,不能實現叢集共用session資料。由於session是屬於伺服器端的技術,不同程序中生成的session物件無法共同使用,所以無法使用session對談技術實現攜帶狀態的請求功能。

資料通訊共用:對談的session會被全部節點所儲存,並行高時會導致叢集中每一個節點中都有量的session物件容易造成伺服器記憶體溢位。

ip_hash黏著:根據ip做hash取餘計算繫結伺服器但有可能導致傾斜,會有伺服器由於傾斜嚴重,提前宕機。

採用第三方容器:session資料不再儲存到伺服器本地,採用第三方儲存使每個伺服器連線這個第三方儲存讀寫資料。但引入第三方勢必導致多佔用網路存取頻寬資源,對容器技術的穩定性,速度要求比較高。理論上儲存容器可以是關係型資料庫(例mysql)。但是非關係型資料庫(例redis)是更好的選擇。

nignx設定ip_hash黏著只需要在upstream的括號中填寫一個關鍵屬性 "ip_hash"。

       upstream ouservers {
              ip_hash;
              server 127.0.0.1:8091;
              server 127.0.0.1:8092;
              server 127.0.0.1:8093;
       }

3. Nginx動靜分離(靜態資源和動態資源來自於不同的伺服器)

後端伺服器叢集是動態資料的來源,nginx作為http伺服器代理用來管理後端所需檔案和靜態資源,在nginx伺服器中,準備好存取的靜態資源可以通過域名url地址存取。

新增server案例(以Linux系統為例)

       server{
              listen 80;
              server_name www.image.com;
              location /{
                     root /home/static; #關鍵字root設定項為靜態資源的根目錄
                     index default.html #沒有找到指定靜態資源時預設存取的靜態資源
              }
        }

具體流轉過程如下:請求地址https://s3.ap-northeast-1.wasabisys.com/img.it145.com/202209/xyynmivodekdqh.png匹配server中的location後將靜態資源名稱tp.png銜接在root設定項後,拼接成資源在Nginx伺服器上的絕對地址/home/static/tp.png根據地址拿到靜態資源返回到瀏覽器頁面給使用者展示。

root設定項:可以是資料夾絕對路徑,如Linux (root /home/static)、Windows(root C:/static)。也可以是資料夾相對路徑root static(表示在nginx安裝的根目錄有一個資料夾叫做static)。

index設定項:表示當存取請求匹配到location中的root後,在沒有找到指定靜態資源時預設存取的靜態資源地址。index也可以設定多個靜態資源,例如:index default1.html default2.html。如果靜態資源/home/static/default1.html不存在則接著驗證/home/static/default2.html是否存在,存在則用/default2.html在該server中發起內部重定向去重新匹配location)

注:在設定nginx.conf檔案時需要將資源ip和監聽域名寫進Nginx伺服器的本地hosts檔案中(如127.0.0.1 www.sayhi.com)

總結

到此這篇關於Nginx組態檔nginx.conf基本設定的文章就介紹到這了,更多相關Nginx組態檔nginx.conf內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com