NGINX配置詳解

2021-07-24 17:36:43 字數 3517 閱讀 4028

nginx的核心模組為main和events,此外還包括標準http模組、可選http模組和郵件模組,其還可以支援諸多第三方模組。main用於配置錯誤日誌、程序及許可權等相關的引數,events用於配置io模型,如epoll、kqueue、select或poll等,它們是必備模組,http模組用於控制nginx的http程序。nginx的主配置檔案由幾個段組成,這個段通常也被稱為nginx的上下文,每個段的定義格式如下所示。需要注意的是,其每乙個指令都必須使用分號(;)結束,否則為語法錯誤。

由上我們了解到,nginx的配置由指令已經引數構成,下面我們就來介紹下nginx常用指令的使用。

main上下文指令

user定義nginx執行的使用者和使用者組用user指令

user www-data;
定義nginx程序數,用worker_processes指令,建議設定為等於cpu總核心數。

worker_processes

2;

全域性錯誤日誌定義型別,[ debug | info | notice | warn | error | crit ]用error_log指令。另外日誌還可以定義在http、server及location上下文中,語法格式一樣。全域性日誌會被http,server等具體的日誌配置所覆蓋。這一定與html中樣式的作用域類似。

error_log /var/log/nginx/error.log info;
定義程序檔案用pid指令

pid /var/run/nginx.pid;
event上下文指令

參考事件模型指令:use [ kqueue | rtsig | epoll | /dev/poll | select | poll ];其中,epoll是linx 2.6版本核心中高效能i/o模型。nginx的並非量和採用的時間模型息息相關。真是因為apache 使用了select模型,而nginx預設使用的epoll模型,導致同等條件下,nginx的效能優於apache的效能10倍左右。後面會有專門的文章做詳細介紹。例如

use

epoll;

http上下文指令

設定mime型別,型別由mime.type檔案定義 用include指令.

include   /etc/nginx/mime.types;## include指令可以將其他檔案的指令引入進來
開啟gzip壓縮指令

gzip

on;

負載均衡伺服器列表指令upstream

upstream mysvr
server (虛擬主機)上下文指令

server上下文指令,主要設定了埠的艦艇,主機名稱,路徑路由,虛擬主機日誌等

server 

location /proxy

# 定義錯誤提示頁面

error_page

500502

503504 /50x.html;

location = /50x.html

}

upstream是nginx的http upstream模組,這個模組通過乙個簡單的排程演算法來實現客戶端ip到後端伺服器的負載均衡。在上面的設定中,通過upstream指令指定了乙個負載均衡器的名稱ixdba.net。這個名稱可以任意指定,在後面需要的地方直接呼叫即可。nginx的upstream目前支援4種方式的分配

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

ip_hash : 每個請求按訪問ip的hash結果分配,這樣來自同乙個ip的訪客固定訪問乙個後端伺服器,有效解決了動態網頁存在的session共享問題。當然如果這個節點不可用了,會發到下個節點,而此時沒有session同步的話就登出掉了。

least_conn: 請求被傳送到當前活躍連線最少的realserver上。會考慮weight的值。

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

upstream 配置如下;

upstream backend

server

}

upstream可對後端伺服器進行健康檢查。

a) down表示當前的server暫時不參與負載。

b) weight預設為1.weight越大,負載的權重就越大。

c) maxfails :在failtimeout時間內對後台伺服器請求失敗的次數。

d) failtimeout:maxfails次失敗後,暫停的時間。

e) backup: 其它所有的非backup機器down或者忙的時候,請求backup機器。所以這台機器壓力會最輕。

這個模組的作用是通過cookie黏貼的方式將來自同乙個客戶端(瀏覽器)的請求傳送到同乙個後端伺服器上處理,這樣一定程度上可以解決多個backend servers的session同步的問題 —— 因為不再需要同步,而rr輪詢模式必須要運維人員自己考慮session同步的實現。

另外內建的ip_hash也可以實現根據客戶端ip來分發請求,但它很容易造成負載不均衡的情況,而如果nginx前面有cdn網路或者來自同一區域網的訪問,它接收的客戶端ip是一樣的,容易造成負載不均衡現象。**tengine的 ngxhttpupstreamsessionsticky_module 也是類似的功能。nginx-sticky-module的cookie過期時間,預設瀏覽器關閉就過期,也就是會話方式。

這個模組並不合適不支援 cookie 或手動禁用了cookie的瀏覽器,此時預設sticky就會切換成rr。它不能與ip_hash同時使用。

sticky的配置

配置起來超級簡單,一般來說乙個sticky指令就夠了。sticky [name=route] [domain=.foo.bar] [path=/] [expires=1h] [hash=index|md5|sha1] [no_fallback];:

name: 可以為任何的 string 字元,預設是 routedomain:哪些網域名稱下可以使用這個 cookiepath:哪些路徑對啟用 sticky,例如 path/test,那麼只有 test 這個目錄才會使用 sticky 做負載均衡expires:cookie 過期時間,預設瀏覽器關閉就過期,也就是會話方式。no_fallbackup:如果設定了這個,cookie 對應的伺服器宕機了,那麼將會返回502(bad gateway 或者 proxy error),建議不啟用

upstream backend

Nginx配置詳解

nginx的主要配置檔案是nginx.conf,位於安裝目錄下的nginx conf資料夾裡,主要的配置引數如下 定義nginx執行的使用者和使用者組 user nobody nobody nginx程序數,建議設定為等於cpu總核心數。worker processes 8 全域性錯誤日誌定義型別,...

nginx配置詳解

定義nginx執行的使用者和使用者組 user www www nginx程序數,建議設定為等於cpu總核心數。worker processes 8 全域性錯誤日誌定義型別,debug info notice warn error crit error log var log nginx error...

NGINX配置詳解

nginx 配置檔案 user nginx 使用者worker processes 8 工作程序,根據硬體調整,大於等於cpu核數 error log logs nginx error.log crit 錯誤日誌 pid logs nginx.pid pid放置的位置 worker rlimit n...