1.配置文件結構
從整體結構上看,Nginx的配置文件主要由main、events、http、server、location五個模塊組成。其中,server塊嵌套在http塊內,location塊嵌套在server塊內,對于嵌套塊中的指令,其執(zhí)行順序為從外至內。
main
events {...}
http {
server {
location {...}
}
}
| 模塊 | 說明 |
|---|---|
| main | 用來配置Nginx工作進程所屬的用戶和用戶組、工作進程數(shù)量、錯誤日志位置與級別、pid位置、工作進程的優(yōu)先級等 |
| events | 用來配置Nginx的工作模式和并發(fā)量 |
| http | 用來配置Nginx處理http請求 |
| server | 用來配置Nginx中的虛擬主機 |
| location | 用來做模式匹配,可以根據(jù)用戶請求的URI來執(zhí)行不同的操作 |
1.1 main模塊
指令詳解:
# 工作進程所屬用戶
user www-data;
# 工作進程數(shù)量,一般為CPU核數(shù)或者CPU核數(shù)的2倍
worker_processes 4;
# 主進程pid的存儲位置
pid /run/nginx.pid;
1.2 events模塊
指令詳解:
events {
# 設置事件模型,epoll是多路復用中的一種方式,僅用于Linux2.6以上的內核
use epoll;
# 單個工作進程的最大并發(fā)連接數(shù),與服務器內存大小有關。
worker_connections 1024;
# 該配置項使得工作進程在獲得新連接通知時,立即接受所有連接,放入監(jiān)聽隊列
multi_accept on;
}
1.3 http模塊
http模塊可以包含多個server模塊,server模塊又可以包含多個location模塊!除了server模塊和location模塊外,還包含http全局塊,用來配置Nginx日志、超時控制、反向代理等。
http全局塊指令詳解:
http {
# mime.types文件是MIME文件類型和文件擴展名的映射。在Nginx返回的響應報文中,
# 通過Content-type字段告知瀏覽器返回的文件類型,而瀏覽器就可以調用相應的應用
# 程序為用戶展示數(shù)據(jù)。
include mime.types;
# Nginx默認返回的文件類型
default_type application/octet-stream;
# 開啟高效的文件傳輸模式(暫時還不理解這個配置)
sendfile on;
#+++++++++#
#+日志配置+#
#+++++++++#
# 設定日志格式
log_format main
'[$time_local] $remote_addr - $remote_user '
'"$request" $request_length $request_time $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
# 設置Nginx訪問日志
access_log /data/nginx/logs/nginx_access.log main;
# 設置Nginx錯誤日志
error_log /data/nginx/logs/nginx_error.log;
#+++++++++#
#+超時控制+#
#+++++++++#
# 設置長連接的保持時間,相當于?;疃〞r器,Nginx默認為75s,一般可設為60s,
# 若設為0,則禁止長連接。
keepalived_timeout 60;
# 客戶端與服務端建立連接后,客戶端發(fā)送完整的請求頭的超時時間,會受請求頭長度和
# 網(wǎng)絡狀況的影響。Nginx默認為60s,若指定時間內,客戶端未發(fā)送完請求頭,則Nginx
# 返回408錯誤,即Request Time Out 。
client_header_timeout 10;
# 客戶端與服務端建立連接后,客戶端發(fā)送請求體的超時時間,會受請求體長度和網(wǎng)絡狀況
# 的影響,在文件上傳服務中,可能需要將此參數(shù)的值調大。Nginx默認為60s,若指定時間
# 內,客戶端未發(fā)送完請求體,則Nginx返回408錯誤。
client_body_timeout 20;
#+++++++++++++++++++++#
#+請求頭、請求體大小限制+#
#+++++++++++++++++++++#
# client_header_buffer_size指令用來分配一個buffer來容納客戶端的請求行和請求頭,默認
# 為1k;large_client_header_buffers 指令用來規(guī)定容納客戶端請求行和請求頭的最大buffer
# 數(shù)量和大小,默認最大數(shù)量為4個,大小為4k。
# Nginx首先根據(jù)client_header_buffer_size配置的值來分配buffer,如果buffer過小,那么再
# 次根據(jù)large_client_header_buffers 配置的值來分配large_buffer,如果large_buffer還是過
# 小,則返回414錯誤(Request-URI Too Large)或者400錯誤(Bad Request)。
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
# client_body_buffer_size指令用來配置請求體緩沖區(qū)的大小,默認為32k;
# client_max_body_size指令用來配置請求體緩沖區(qū)的最大值,默認為1m;對于文件上傳服
# 務器來說,client_max_body_size的配置十分重要。
client_body_buffer_size 32k;
client_max_body_size 1m;
#+++++++++#
#+Gzip壓縮+#
#+++++++++#
# Gzip是頁面壓縮技術,其作用是對服務端返回的頁面進行壓縮,以減小頁面的體積,提高
# 瀏覽器對頁面的加載速率。一般情況下,對于js、css、jpg、jepg、png、gif這樣的靜
# 態(tài)文件需要開啟Gzip壓縮技術。
# 開啟gzip壓縮
gzip on;
# 設置允許壓縮的頁面的最小字節(jié)數(shù),默認為1k;頁面大小可以從響應頭的Content-Length
# 中獲取。
gzip_min_length 1k;
# 配置壓縮頁面的緩沖區(qū)數(shù)量以及單個緩沖區(qū)的大小,默認為內存的一個頁的大小。
gzip_buffers 4 4k;
# 允許Gzip壓縮的文件類型
gzip_types text/plain application/javascript text/css image/jpeg image/png image/gif;
# 壓縮級別,取值范圍[1-9],默認為1,一般設為4或4;其值越大,壓縮率越大,但是
# 消耗的CPU時間越長。
gzip_comp_level 4;
# 指定允許的HTTP版本號,默認為1.1
gzip_http_version 1.1;
}
日志格式參數(shù)說明:
| 參數(shù) | 說明 | 示例 |
|---|---|---|
| $time_local | 本地時間和時區(qū) | 18/Jul/2012:17:00:01 +0800 |
| $remote_addr | 客戶端IP地址 | 211.71.72.69 |
| $remote_user | 客戶端名稱 | - |
| $request | 請求方式、請求的URI、HTTP協(xié)議版本 | "GET /article-10000.html HTTP/1.1" |
| $request_length | 請求的長度,包括行、頭、體 | |
| $request_time | 請求處理時間,單位s,指從讀取客戶端第一個字節(jié)開始,直到將最后一個字節(jié)內容返回給客戶端 | |
| $status | 服務端返回的狀態(tài)碼 | 200 |
| $body_bytes_sent | 服務端返回的內容大小,不包括響應行、響應頭,單位字節(jié) | 1547 |
| $http_referer | URL跳轉來源 | https://www.baidu.com/ |
| $http_user_agent | 客戶端瀏覽器信息 | "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; GTB7.0; .NET4.0C;" |