默認配置
user nginx nginx; #啟動用戶和組 worker_processes 1; #啟動工作進程數數量,與服務器CPU核心數相匹配 worker_cpu_affinity auto; #將Nginx工作進程自動識別綁定在指定的CPU核心上,避免在不同的CPU上來回切換(頻繁切換CPU會造成內核在內存中來回進行內存的注冊與回收) error_log logs/error.log error; #指定錯誤日志級別 pid logs/nginx.pid; #指定PID文件路徑 worker_priority -10; #工作進程nice值,-20~19;如果服務器有多個服務,想讓nginx占用更多的內存時間片(優先調度),就調低一些 worker_rlimit_nofile 65536; #nginx的所有連接,客戶端及代理服務器;實際的並發連接數不能超過系統級別的最大打開文件數的限制,需要與ulimt相同
events模塊(事件設置模塊)配置
worker_connections 65536; #單個nginx工作進程可以接受的最大並發;作為反向代理的時候為(worker_connections * worker_processes)/2;因為一個用戶處理請求需要建立兩次連接,所以一個用戶的請求需要占用兩個文件描述符;需要配合worker_rlimit_nofile及ulimit使用 use epoll; #使用epoll事件驅動模型,默認不寫就是epoll accept_mutex on; #優化同一時刻只有一個請求而避免多個睡眠進程被喚醒的設置 multi_accept on; #默認為一個工作進程只能一次接受一個新的網絡連接,打開后可以同時接受多個
http模塊配置
一個http模塊可以包含多個server模塊,一個server模塊就是一個基於域名的虛擬主機;一個IP可以對應多個域名 include mime.types; #nginx所支持的mime類型;包含文本、圖像、音頻、視頻以及其他應用程序專用的數據,對應的文件用對應的應用程序打開 default_type application/octet-stream; #不在mime類型里面的數據,默認為下載 sendfile on; #數據被kernel buffer直接拷貝到另外一個與socket相關的kernel buffer,然后直接發送給協議棧,減少了內核空間到用戶空間的復制;sendfile只有作為web服務器的時候使用,加快靜態資源傳輸;反向代理時,都是由后端服務器進程處理,文件渲染及連接數據庫等 keepalive_timeout 65; #長連接超時時間,單位是秒;如果http模塊下的server中也進行配置,以server優先 access_log /var/log/nginx/access.log main; #開啟nginx訪問日志,指定日志格式;對所有server有效,如果server中定義,則server優先級高 tcp_nopush on; #配合sendfile一起使用;如果一個報文不夠一個包的最大值,那么CPU會對報文進行封裝頭部和尾部,直接發送過去;一個數據包最大1500個字節;開啟tcp_nopush,內核會等夠一個包的最大值之后再發送出去;但用戶訪問可能會出現延遲,但會節省CPU利用率 tcp_nodelay off; #在開啟了keepalived模式下的連接是否啟用TCP_NODELAY選項,當為off時,延遲0.2s發送,默認On時,不延遲發送,立即發送用戶相應報文。與tcp_nopush配合使用 server_tokens off; #隱藏Nginx版本 gzip on; #開啟文件壓縮;對回復的數據報文進行壓縮;CPU對報文進行封裝壓縮,會消耗一定的CPU資源 gzip_comp_level 5; #設置壓縮級別1——9,一般設置到3——5;壓縮級別越高,壓縮比也就越高,CPU消耗資源越大 gzip_disable "MSIE [1-6]\."; #禁止對msie的瀏覽器進行壓縮;msie瀏覽器不支持壓縮 gzip_min_length 1k; #當文件小於1K時不進行壓縮 gzip_http_version 1.1; #啟用壓縮時,協議的最小版本,默認是HTTP/1.1;當http協議版本低於1.1時不進行壓縮 gzip_types text/plain application/javascript application/x-javascript text/cssapplication/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; #指定針對那些類型的資源進行壓縮,text/html不用添加,默認添加了,指定添加反而報錯 gzip_vary on; #告知客戶端啟用壓縮了 gzip_buffers 32 4k; #向服務器申請的壓縮緩存的空間大小;緩存大小為數量*大小(4K);還可以設置為16 8K;如果服務器的壓縮文件大小為都幾乎在4K以上,則設置每個緩存大小為8K;如果服務器的壓縮文件幾乎都是小資源(低於4K),就算用8K的緩存,一個小資源也會占用一整個8K的緩存,所以如果都是小資源則選擇4K,如果大資源較多,則選擇8K include /app/nginx/conf/conf.d/*.conf; #讓nginx識別指定目錄的以.conf結尾的文件;讀取http模塊的子配置文件
http模塊中定義虛擬主機(http模塊中的server模塊)
server { #可以定義多個虛擬主機 listen 80; #默認監聽本機所有IP的80端口;也可以寫成xxx.xxx.xxx.xxx:80 server_name example.com *.example.com; #公網域名;可以設置多個域名指定同一個站點進行資源定位,支持正則表達式;也可以寫成 ~^www\.site\d+\.net$這種形式,使用正則表達式時,表達式前面必須加~;如果這幾個域名都不匹 配,可以指定default_server,所有域名都不匹配,則顯示默認主站點頁面;default_server設置在 主配置文件的server下,不要設置在子配置文件的server種 charset utf-8; #必須設置編碼格式 access_log logs/host.access.log main; #每個server(域名)可以單獨指定訪問日志,日志格式是http模塊中的格式 keepalive_requests 3; #在一次長連接上累計所允許請求的資源的最大數量,默認為100次,不是並發;如果一次長連接累計請求資源數量達到設置的最大 值,則服務器主動和客戶端斷開鏈接;網站小資源比較多,則調到300-500左右,但也不能調到太多;這個設置主要是避免有太 多的長連接;可以設置在http模塊和server中,server優先級高,server中設置則使用server中的配置,如果server未設置, 則使用http中的默認設置 keepalive_timeout 65 65; #設置超時時長,后面的65為用戶可以看到的超時時長,服務端設置的超時時長可以和用戶看到的超時時長不一致 location / { #定位站點位置 root html; index index.html index.htm; } error_page 500 502 503 504 404 /50x.html; #遇到這些錯誤狀態碼時,用指定的提示頁面替代原有的報錯頁面;如果訪問指定域名的未存在資源 時,想向用戶提供報錯頁面,則就把這一行復制到指定域名的server下即可 location = /50x.html { #指定錯誤頁面的文件名和路徑 root html; } location /host.pass { #當訪問網站根下的這個資源,全部拒絕 deny all; } }
實現虛擬主機
server { listen 80; server_name www.xxxmb.net; location /linux { root /data/nginx/mobile/html; index index.html; } location /python { root /data/nginx/mobile/html; index index.html; } } server { listen 80; server_name www.xxxpc.net; location /linux { root /data/nginx/pc/html; index index.html; } location /python { root /data/nginx/pc/html; index index.html; } } 創建兩個虛擬主機;一個IP對應兩個域名