架構師細說 NGINX 的配置及優化

2021-08-25 19:21:28 字數 3325 閱讀 5606

最近感覺很多東西在運用到一定的程度之後,會發現原來是自己了解到的不夠。一方面限於實際運用到的不多,一方面可能是因為一開始沒有進行全面認識。遂這裡蒐集整理了一番nginx。

centos平台,原始碼安裝的

/usr/local/nginx/nginx # 啟動

/usr/local/nginx/nginx -s reload # 平滑重啟

/usr/local/nginx/nginx.conf # 配置檔案

mac平台,使用brew安裝的

/usr/local/bin/nginx # 啟動

/usr/local/bin/nginx -s reload # 平滑重啟

/usr/local/etc/nginx/nginx.cnf # 配置檔案

其實,對比,apache 的配置檔案,它的相對比較清晰和簡單,之前覺得很難,現在沉下心來想想,其實很簡單。大致的分塊下,基本就分為以下幾塊:

main

events 下面定義的區分開來

index index.php index.html index.htm;

# index 全域性定義訪問的預設首頁位址。注意要和 locate {} 下面定義的區分開來

charset utf-8; # 設定網頁的預設編碼格式

access_log usr/local/var/log/host.access.log main;

# access_log 指定此虛擬主機的訪問日誌存放路徑,最後的 main 用於指定訪問日誌的輸出格式

error_log usr/local/var/log/host.error.log error;

server 標誌定義虛擬主機開始。

listen 用於指定虛擬主機的服務埠。

server_name 用來指定ip位址或者網域名稱,多個網域名稱之間用空格分開。

root 表示在這整個 server 虛擬主機內,全部的 root web 根目錄。注意要和 locate {} 下面定義的區分開來。

index 全域性定義訪問的預設首頁位址。注意要和 locate {} 下面定義的區分開來。

charset 用於設定網頁的預設編碼格式。

access_log 用來指定此虛擬主機的訪問日誌存放路徑,最後的 main 用於指定訪問日誌的輸出格式。

2.5 location 模組

location 根據它字面意思就知道是來定位的,定位 url,解析 url,所以,它也提供了強大的正則匹配功能,也支援條件判斷匹配,使用者可以通過 location 指令實現 nginx 對動、靜態網頁進行過濾處理。像我們的 php 環境搭建就是用到了它。

我們先來看這個,設定預設首頁和虛擬機器目錄。

location / { # 表示匹配訪問根目錄

root /users/yangyi/www; # 指定訪問根目錄時,虛擬主機的 web 目錄

index index.php index.html index.htm; # 設定我們只輸入網域名稱後訪問的預設首頁位址

location / 表示匹配訪問根目錄。

root 指令用於指定訪問根目錄時,虛擬主機的web目錄,這個目錄可以是相對路徑(相對路徑是相對於nginx的安裝目錄)。也可以是絕對路徑。

index 用於設定我們只輸入網域名稱後訪問的預設首頁位址,有個先後順序:index.php index.html index.htm,如果沒有開啟目錄瀏覽許可權,又找不到這些預設首頁,就會報403錯誤。

location 還有一種方式就是正則匹配,開啟正則匹配這樣:location ~。後面加個~。

location ~ .php$ {

root /users/yangyi/www;

fastcgi_index index.php;

include fastcgi.conf;

.php$ 熟悉正則的我們直到,這是匹配 .php 結尾的 url,用來解析 php 檔案。裡面的 root 也是一樣,用來表示虛擬主機的根目錄。

2.6 upstream 模組

upstream 模組負責負載均衡模組,通過乙個簡單的排程演算法來實現客戶端 ip 到後端伺服器的負載均衡

upstream iyangyi.com{

ip_hash;

server 192.168.12.1:80;

server 192.168.12.2:80 down;

server 192.168.12.3:8080 max_fails=3 fail_timeout=20s;

server 192.168.12.4:8080;

在上面的例子中,通過 upstream 指令指定了乙個負載均衡器的名稱 iyangyi.com。這個名稱可以任意指定,在後面需要的地方直接呼叫即可。

裡面是 ip_hash 這是其中的一種負載均衡排程演算法,下面會著重介紹。緊接著就是各種伺服器了。用 server 關鍵字表識,後面接 ip。

nginx 的負載均衡模組目前支援 4 種排程演算法 :

1)weight 輪詢(預設)

每個請求按時間順序逐一分配到不同的後端伺服器,如果後端某台伺服器宕機,故障系統被自動剔除,使使用者訪問不受影響。weight。指定輪詢權值,weight值越大,分配到的訪問機率越高,主要用於後端每個伺服器效能不均的情況下。

2)ip_hash

每個請求按訪問ip的hash結果分配,這樣來自同乙個ip的訪客固定訪問乙個後端伺服器,有效解決了動態網頁存在的session共享問題。

3)fair

4)url_hash

按訪問url的hash結果來分配請求,使每個url定向到同乙個後端伺服器,可以進一步提高後端快取伺服器的效率。nginx本身是不支援url_hash的,如果需要使用這種排程演算法,必須安裝nginx 的hash軟體包。

down,表示當前的server暫時不參與負載均衡。

backup,預留的備份機器。當其他所有的非backup機器出現故障或者忙的時候,才會請求backup機器,因此這台機器的壓力最輕。

max_fails,允許請求失敗的次數,預設為1。當超過最大次數時,返回proxy_next_upstream 模組定義的錯誤。

fail_timeout,在經歷了max_fails次失敗後,暫停服務的時間。max_fails可以和fail_timeout一起使用。

注意 當負載排程演算法為ip_hash時,後端伺服器在負載均衡排程中的狀態不能是weight和backup。

**:

架構師日記 Nginx的配置優化

優化的方向和目標,無外乎 1.盡量提高單台機器處理效率 2.盡量降低單台機器的負載 3.盡量降低磁碟的i o 4.盡量降低網路i o 5.儘量減少記憶體使用 6.盡量高效利用cpu 生產環境下,應該使nginx模組最小化,就是用到哪幾個就開哪幾個,這個需要在編譯安裝nginx的時候做 使用者和組,最...

架構師日記 Nginx的HTTP模組配置

core module支援一些內建的變數,與apache使用的變數相一致。首先,一些變數代表了客戶端請求頭部的一些字段,如 http user agent,http cookie等等。注意,由於這些變數會在請求中定義,所以可能無法保證他們是存在的或者說可以定義到一些別的地方 例如遵循一定的規範 除此...

聊聊架構及架構師

b 1.架構分類 b 關於架構,大體可以分為以下三類 1.1 it架構 基於硬體 網路等構建整體的it運維架構體系,包括idc機房 網路拓撲 安全 負載均衡 運維監控等 1.2 基礎架構 1.3 應用架構 偏重於業務功能的實現,在基於使用者需求實現業務功能 提公升使用者體驗的基礎上,保證系統的效能 ...