#==基礎配置==#
user nginx;
#設置運行用戶,當運行NGINX時,進程所使用的用戶,則進程擁有該用戶對文件或目錄的操作權限。
worker_processes 4;
#設置工作進程數量,一般情況下工作進程數等於CPU核心數。
worker_cpu_affinity 0001 0010 0100 1000;
#設置工作進程綁定CPU核心,一個工作進程使用一個CPU核心,可以減少進程頻繁切換導致CPU處理所導致的資源損
#耗。"0001"四位數表示CPU有四個核心,"1"在第幾位表示使用第幾個核心。
worker_rlimit_nofile 102400;
#設置每個工作進程可同時打開的文件描述符數量。在Linux系統中默認情況下為"1024",我們可以通過
#"ulimit -a |grep 'open files'"命令查看,設置此值可突破並發文件數量限制。
error_log /var/log/nginx/error.log error;
#設置錯誤日志文件路徑,可設置錯誤日志記錄的級別。
#錯誤日志級別有:
# debug 調試,將記錄詳細的大量調試信息,適合開發人員開啟
# info 信息,記錄更多的通知信息,不重要的
# notice 通知,記錄通知信息,不重要的
# warn 警告,記錄警告信息
# error 錯誤,記錄錯誤信息
# crit 嚴重,只記錄非常嚴重的錯誤信息
pid /run/nginx.pid;
#設置進程文件路徑,運行NGINX會生成一個PID進程文件到指定路徑,用於保證進程持久化運行。
include /usr/share/nginx/modules/*.conf;
#設置包含的其他配置文件,一些加載NGINX動態模塊相關配置文件,由"load_moule"指令控制動態模塊的加載。
#==事件配置==#
events {
worker_connections 102400;
#設置每個Worker進程可處理的並發連接數量,可根據需求合理配置此值。建議
#與"worker_rlimit_nofile"指令的值一致或更小。
}
#==核心配置==#
http {
include /etc/nginx/mime.types;
#設置還包含其他配置文件,“mime.types”文件,記錄MIME類型與文件后綴的映射關系,MIME類型是互聯網媒
#體類型的縮寫。所以該文件是用於WEB服務可以識別的、允許用戶上傳的這些后綴相關的媒體文件。
default_type text/plain;
#設置默認MIME類型,當用戶上傳一個文件,非“mime.types”文件中記錄的后綴文件時的處理方式,則將該文
#件識別默認指定MIME類型的文件,"text/plain"表示將會保存為".txt"格式的文件。
types_hash_max_size 2048;
#設置類型哈希表的大小,單位為字節。用於將MIME類型的數據通過哈希后緩存到內存中,以提高對MIME類型映
#射表的讀取效率。
charset UTF-8;
#設置字符集編碼,防止NGINX對於中文返回的顯示亂碼。
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#定義日志格式,“main”表示該日志格式名,用於下方“access_log”訪問日志中調用
# $remote_addr 遠程訪問地址
# $remote_user 遠程訪問用戶
# $time_local 訪問時間
# $request 請求的URL與HTTP協議
# $status 請求狀態,成功為200
# $body_bytes_sent 發送給客戶端文件主機內容大小
# $http_referer 從哪個頁面連接訪問過來的
# $http_user_agent 客戶端瀏覽器的相關信息
# $http_x_forwarded_for 遠程訪問地址,與remote_addr相同
sendfile on;
#啟用或禁用"sendfile()"函數的調用,"on" or "off","on"表示啟用,"off"表示禁用。當線程響應
#時,"sendfile()"函數會報告線程數據不在內存中而是在硬盤中,則線程直接去硬盤拿到響應數據直接傳送
#給用戶,而無需調用內存去硬盤拿響應數據,省去了調用內存的步驟,在小型WEB項目中可以提高請求響應效
#率,若是重量級WEB項目,為了平衡磁盤IO則不建議開啟。我們也可以將此指令稱之為高效傳輸模式。
tcp_nopush on;
#啟用或禁用TCP_NOPUSH套接字選項,"on" or "off","on"表示啟用,啟用此項的前提是必須開
#啟"sendfile","off"表示禁用。有時候在傳輸一個響應數據時,可能會產生多個小塊數據包傳出,可能這個
#小塊數據包頭部大小為30字節,而真正數據信息只有1字節,在高並發環境下會導致網絡擁塞、帶寬不夠用問
#題。開啟此項則傳出的數據包會積累一下在傳出,可以防止網絡擁塞,減少帶寬的占用。
tcp_nodelay on;
#啟用或禁用TCP_NODELAY套接字選項,"on" or "off","on"表示啟用,"off"表示禁用。此項與
#"tcp_nopush"的功能剛好相反,若開啟此項則對於小塊數據包不等待立即傳輸,有時候一個WEB應用期望發
#送小塊數據時,則建議開啟,當“tcp_nopush”和“tcp_nodelay”同時開啟時,NGINX會平衡這兩個功能的使
#用。
keepalive_timeout 75s;
#設置保持客戶端連接活躍狀態的超時時間,單位為秒。
send_timeout 60s;
#設置服務器將響應發送給客戶端的超時時間,單位為秒。
include /etc/nginx/conf.d/*.conf;
#設置還包含其他配置文件,我們可以將一些其他配置分離到另外一個文件中處理,避免主配置文件因為配置太
#多導致混亂不方便管理,比如下面的"server {}",在NGINX中我們可以配置多個"server {}"則我們可以將
#每個"server {}"分離到另外一個配置文件中,即一個配置文件對應一個WEB站點。
#==WEB站點配置==#
server {
listen 80 default_server;
#設置監聽IPV4的地址與端口,地址為空表示監聽所有,“default_server”即默認服務器,DNS映射一個
#域名到該主機,但是當用戶訪問的這個域名與這些WEB虛擬主機綁定的域名都不匹配的情況下,默認由監
#聽“default_server”的虛擬主機呈現內容。
listen [::]:80 default_server;
#設置監聽IPV6的地址與端口。
server_name static.test.com;
#設置域名綁定,綁定一個域名。
access_log /var/log/nginx/static_access.log main;
#設置訪問日志文件路徑,用於記錄每個訪問請求,“main”調用上面日志格式
location / {
#設置訪問位置(URI),即用戶訪問的URL的尾部部分。當匹配到請求的URI時,則呈現由"{ }"中定義的
#內容。location指令針對於匹配URI可以嵌入正則表達式,實現一些高級應用,詳細用法請參考《HTTP
#配置高級指令》。
root /usr/share/nginx/html;
#設置WEB應用根目錄。
index index.html;
#設置默認首頁文件,當用戶訪問域名或IP地址是自動索引呈現該文件中的內容,該文件在若為相對路
#徑則會在WEB應用根目錄下。
}
error_page 404 /404.html;
#當匹配到響應代碼,則將請求重定向到指定的URI。
location = /40x.html {
#匹配上面重定向的URI,則呈現相關響應代碼的會呈現給用戶的內容。若"{}"為空則返回默認頁面。
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}