nginx的核心模組為main和events,此外還包括標準http模組、可選http模組和郵件模組,其還可以支援諸多第三方模組。main用於配置錯誤日誌、程序及許可權等相關的引數,events用於配置io模型,如epoll、kqueue、select或poll等,它們是必備模組。
nginx的主配置檔案由幾個段組成,這個段通常也被稱為nginx的上下文,每個段的定義格式如下所示。需要注意的是,其每乙個指令都必須使用分號(;)結束,否則為語法錯誤。
error_log 用於配置錯誤日誌,可用於main、http、server及location上下文中
語法格式:
error_log file | stderr [ debug | info | notice | warn | error | crit | alert | emerg ]
備註:要禁用錯誤日誌,不能使用「error_log off;」,而要使用類似如下選項:
error_log /dev/null crit;
timer_resolution 用於降低gettimeofday()系統呼叫的次數。預設情況下,每次從kevent()、epoll、/dev/poll、select()或poll()返回時都會執行此系統呼叫
語法格式:
timer_resolution interval
例如:timer_resolution 100ms;
worker_cpu_affinity 通過sched_setaffinity()將worker繫結至cpu上,只能用於main上下文
語法格式:
worker_cpu_affinity cpumask ...
例如:worker_processes 2;
worker_cpu_affinity 0001 0010 ;
worker_priority 為worker程序設定優先值,預設為0
語法格式:
worker_priority number
worker_processes worker程序是單執行緒程序。如果nginx用於cpu密集型的場景中,如ssl或gzip,且主機上的cpu個數至少有2個,那麼應該將此引數值設定為與cpu核心數相同;如果nginx用於大量靜態檔案訪問的場景中,且所有檔案的總大小大於可用記憶體時,應該將此引數的值設定得足夠大以充分利用磁碟頻寬。
此引數與events上下文中的work_connections變數一起決定了maxclient的值:
maxclients = work_processes * work_connections
worker_rlimit_nofile 設定worker程序所能夠開啟的檔案描述符個數的最大值
語法格式:
worker_rlimit_nofile number
worker_connections 設定每個worker所處理的最大連線數,它與來自main上下文的worker_processes一起決定了maxclients的值
use 在有著多於乙個的事件模型io的應用場景中,可以使用此指令設定nginx所使用的io機制,預設為./configure指令碼選定的各機制中最適用當前os的版本
語法格式:
use [ kqueue | rtsig | epoll | /dev/poll | select | poll | eventport ]
配置例項
user nginx;
worder_processes 8;
error_log /var/log/nginx/error.log
pid /var/run/nginx.pid
events
主要可以分為如下幾個類別
客戶端類指令:如client_body_buffer_size、client_header_buffer_size、
client_header_timeout和keepalive_timeout等;
檔案io類指令:如aio、directio、open_file_cache、open_file_cache_min_uses、
open_file_cache_valid和sendfile等;
hash類指令:用於定義nginx為某特定的變數分配多大的記憶體空間,如types_hash_bucket_size、
server_names_hash_bucket_size和variables_hash_bucket_size等;
用時)和tcp_nopush(用於sendfile啟用時)等;
server
用於定義虛擬伺服器相關的屬性,常見的指令有backlog、rcvbuf、bind及sndbuf等。
location [modifier] uri 或 location @name
通常用於server上下文中,用於設定某uri的訪問屬性。location可以巢狀。
proxy_connect_timeout:nginx將乙個請求傳送至upstream server之前等待的最大時長;
proxy_cookie_domain:將upstream server通過set-cookie首部設定的domain屬性修改為指定的
值,其值可以為乙個字串、正規表示式的模式或乙個引用的變數;
proxy_cookie_path: 將upstream server通過set-cookie首部設定的path屬性修改為指定的值,其
值可以為乙個字串、正規表示式的模式或乙個引用的變數;
proxy_hide_header:設定傳送給客戶端的報文中需要隱藏的首部;
proxy_pass:指定將請求**至upstream server的url路徑;
proxy_set_header:將傳送至upsream server的報文的某首部進行重寫;
proxy_redirect:重寫location並重新整理從upstream server收到的報文的首部;
proxy_send_timeout:在連線斷開之前兩次傳送至upstream server的寫操作的最大間隔時長;
proxy_read_timeout:在連線斷開之前兩次從接收upstream server接收讀操作的最大間隔時長;
proxy_redirect off; 不重寫url
proxy_set_header host $host; 將頭部進行**
proxy_set_header x-real-ip $remote_addr;
proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 30;
proxy_send_timeout 15;
proxy_read_timeout 15;
常用指令
個upstream伺服器;
upstream模組的負載均衡演算法主要有三種,輪調(round-robin)、ip雜湊(ip_hash)和最少連線(least_conn)三種
keepalive:每個worker程序為傳送到upstream伺服器的連線所快取的個數;
least_conn:最少連線排程演算法;
weight:權重;
max_fails:最大失敗連線次數,失敗連線的超時時長由fail_timeout指定;
fail_timeout:等待請求的目標伺服器傳送響應的時長;
backup:用於fallback的目的,所有服務均故障時才啟動此伺服器;
down:手動標記其不再處理任何請求; 例項
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...