首頁 > 軟體

Nginx設定之main events塊使用範例詳解

2022-11-25 14:01:37

作用

  • 反向代理
  • 負載均衡
  • web快取

設定

nginx 的設定主要可以劃分為maineventshttpserverlocation 塊。

  • main:置影響nginx全域性的指令。一般有執行nginx伺服器的使用者組,nginx程序pid存放路徑,紀錄檔存放路徑,組態檔引入,允許生成worker process數等。
  • events:設定影響nginx伺服器或與使用者的網路連線。有每個程序的最大連線數,選取哪種事件驅動模型處理連線請求,是否允許同時接受多個網路連線,開啟多個網路連線序列化等。
  • http:可以巢狀多個server,設定代理,快取,紀錄檔定義等絕大多數功能和第三方模組的設定。如檔案引入,mime-type定義,紀錄檔自定義,是否使用sendfile傳輸檔案,連線超時時間,單連線請求數等
  • server:設定虛擬主機的相關引數,一個http中可以有多個server
  • location:設定請求的路由,以及各種頁面的處理情況。

下面就以組態檔作為參考

每個指令必須以分號結束

# main塊 
user  nobody nobody;  # 設定nginx執行的使用者或者組,如果只設定了一個,說明使用者跟組都是同一個名稱
worker_processes  1; # 允許生成的程序數,預設為1;可以設定為auto,一般設定為cpu的核心數
#pid        logs/nginx.pid;  # nginx 程序pid的存放地址
# 制定紀錄檔路徑,級別。這個設定可以放入全域性塊,http塊,server塊,
# 級別以此為:debug|info|notice|warn|error|crit|alert|emerg
error_log  logs/error.log; 
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
# events塊
events {
  accept_mutex on;   #設定網路連線序列化,防止驚群現象發生,預設為on
  multi_accept on;  #設定一個程序是否同時接受多個網路連線,預設為off
  #use epoll;      #事件驅動模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
  worker_connections  1024;  #最大連線數,預設為512
}
# http塊
http {
  # http 全域性塊
  include       mime.types;   #副檔名與檔案型別對映表
  default_type  application/octet-stream;  #預設檔案型別,預設為text/plain
  #access_log off; #取消服務紀錄檔
  # 自定義紀錄檔模板  main 為自定義紀錄檔模板的名稱
  #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  #                  '$status $body_bytes_sent "$http_referer" '
  #                  '"$http_user_agent" "$http_x_forwarded_for"';
  # 紀錄檔型別  紀錄檔輸出路徑    使用的紀錄檔模板
  #access_log  logs/access.log  main;
  sendfile        on;  #允許sendfile方式傳輸檔案,預設為off,可以在http塊,server塊,location塊
  sendfile_max_chunk 100k;  #每個程序每次呼叫傳輸數量不能大於設定的值,預設為0,即不設上限。
  keepalive_timeout 65;  #連線超時時間,預設為75s,可以在http,server,location塊。
  # 啟用了sendfile 才會生效,作用是等封包累積到一定大小才傳送
  #tcp_nopush     on;
 # 開啟gzip壓縮,對於文字檔案,在伺服器端傳送響應之前進行 GZip 壓縮,壓縮後的文字大小會減小到原來的 1/4 - 1/3
  gzip  on;  
  # 負載均衡設定
	upstream mysvr {   
      server 127.0.0.1:7878;      
      server 192.168.10.121:3333 backup;  #熱備(其它所有的非backup機器down或者忙的時候,請求backup機器))
  }
  upstream mysvr2 {
	#weigth參數列示權值,權值越高被分配到的機率越大
     server 192.168.1.11:80 weight=5;
     server 192.168.1.12:80 weight=1;
     server 192.168.1.13:80 weight=6;
   }
  # server 塊
  server {
    # server 全域性塊
    listen       80;  # 監聽埠
    server_name  localhost; # 監聽地址
    keepalive_requests 120; #單連線請求上限次數
    # http請求強制跳轉https
    rewrite ^(.*)$  https://$host$1 permanent; 
    #charset koi8-r;
    #access_log  logs/host.access.log  main;
    # location 塊
    location / {    #請求的url過濾,正則匹配,~為區分大小寫,~*為不區分大小寫
      root   html; #根目錄設定
      index  index.html index.htm; #設定預設頁,html/index.html
      proxy_pass  http://mysvr;  #請求轉向mysvr 定義的伺服器列表
      deny 127.0.0.1;  #拒絕的ip
      allow 172.18.5.54; #允許的ip
    }
  # HTTPS設定,此設定需要ssl模組的支援
  server {
      listen       443 ssl;
      server_name  localhost;
    	# https 證書地址
      ssl_certificate      cert.pem;
      ssl_certificate_key  cert.key;
      ssl_session_cache    shared:SSL:1m; 
      ssl_session_timeout  5m; #快取有效期
      ssl_ciphers  HIGH:!aNULL:!MD5; #安全連結可選的加密協定
      ssl_prefer_server_ciphers  on;  #使用伺服器端的首選演演算法
      location / {
          root   html;
          index  index.html index.htm;
      }
  }
} 

main

user  nobody nobody;  
worker_processes  1;
pid        logs/nginx.pid; 
daemon off;
error_log  logs/error.log; 
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
worker_rlimit_nofile  65535;
  • user:設定nginx執行的使用者以及組,如果只設定了一個,說明使用者跟組都是同一個名稱,window下不用設定。
  • worker_processes:工作程序數,根據硬體設定調整,通常等於CPU核心數或者2倍,也可以設定為auto,預設為1
  • pidpid(程序識別符號)存放路徑,windows 放在 logs/nginx.pid
  • daemon:設定nginx是否以守護行程執行,off否,on
  • error_log:指定紀錄檔路徑、級別,這個設定可以放到main塊http塊server塊
  • worker_rlimit_nofile: 一個程序能開啟的檔案描述符最大值,理論上該值應該是最多能開啟的檔案數除以程序數,但是由於 nginx 負載並不是完全均衡的,所以這個值最好等於最多能開啟的檔案數。

可以通過·getconf PAGESIZE· 來檢視LINUX的分頁大小

  • open_file_cache:設定快取,為開啟的檔案指定快取,預設是沒有啟用的。max 引數指定快取最大數量,建議和開啟檔案數一致。inactive 引數指經過多長時間檔案沒有被請求(或沒有被使用)後刪除快取。開啟檔案最大數量為我們在 main 設定的 worker_rlimit_nofile 引數(該引數用來為工作程序設定檔案描述符的限制)。
  • open_file_cache_valid:多久檢查一次快取的有效性,如果一個檔案在inactive時間內沒有被使用到,它將從快取中移除。
  • open_file_cache_min_uses:設定快取中的檔案在 open_file_cache 指令中的 inactive 引數(open_file_cache max=2000 inactive=60s;)指定的時間內檔案的最少使用次數。如果超過這個數位,檔案描述符一直是在快取中開啟的。如果有一個檔案在 inactive 時間內未達到最少使用次數,它將被從快取移除。

events

events {
    #use epoll; 
    accept_mutex on;
    multi_accept on;
    worker_connections 20000;
    client_header_buffer_size 4k;
    open_file_cache max=2000 inactive=60s;
    open_file_cache_valid 60s;
    open_file_cache_min_uses 1;
}
  • use:指令用來指定要使用的連線處理方法。通常不需要顯式指定它,因為 nginx 預設會使用最有效的方法;select|poll|kqueue|epoll|resig|/dev/poll|eventport
  • accept_mutex:用來設定網路連線序列化,防止驚群現象發生,預設為on

驚群現象:指多程序(多執行緒)在同時阻塞等待同一個事件的時候(休眠狀態),如果等待的這個事件發生,那麼他就會喚醒等待的所有程序(或者執行緒),但是最終卻只能有一個程序(執行緒)獲得這個時間的“控制權”,對該事件進行處理,而其他程序(執行緒)獲取“控制權”失敗,只能重新進入休眠狀態,這種現象和效能浪費就叫做驚群效應

  • multi_accept:設定是否允許同時接受多個網路連線,只能在events塊設定。預設關閉

nginx伺服器每個工作程序可以同時接受多個新的網路連線,但是預設是關閉的,需要在nginx.conf組態檔中設定multi_accept on;

  • worker_connections 設定工作程序最大連線數,理論上每臺 Nginx 伺服器的最大連線數為 worker_processes*worker_connections。其中,worker_processes 為指定的工作程序數量,該設定在全域性塊中。
  • client_header_buffer_size:使用者端請求頭部的緩衝區大小,根據系統分頁大小來設定,可以設定為系統分頁的大小。

Linux查詢系統分頁大小命令:getconf PAGESIZE

  • open_file_cache:設定快取,為開啟的檔案指定快取,預設是沒有啟用的。max 引數指定快取最大數量,建議和開啟檔案數一致。inactive 引數指經過多長時間檔案沒有被請求(或沒有被使用)後刪除快取。開啟檔案最大數量為我們在 main 設定的 worker_rlimit_nofile 引數(該引數用來為工作程序設定檔案描述符的限制)。
  • open_file_cache_valid:多久檢查一次快取的有效性,如果一個檔案在inactive時間內沒有被使用到,它將從快取中移除。
  • open_file_cache_min_uses:設定快取中的檔案在 open_file_cache 指令中的 inactive 引數(open_file_cache max=2000 inactive=60s;)指定的時間內檔案的最少使用次數。如果超過這個數位,檔案描述符一直是在快取中開啟的。如果有一個檔案在 inactive 時間內未達到最少使用次數,它將被從快取移除。

以上就是Nginx 設定之main/events塊的詳細內容,更多關於Nginx 設定之main/events塊的資料請關注it145.com其它相關文章!


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