六、nginx的配置檔案說明
阿新 • • 發佈:2020-09-08
[root@inode1 ~]# tree /usr/local/nginx /usr/local/nginx ├── client_body_temp ├── conf.d #nginx的子配置檔案目錄(該目錄用來存放nginx配置檔案的,如:虛擬主機的配置檔案;原始碼編譯沒有,可以手動建立) ├── conf #nginx的配置檔案目錄 │ ├── fastcgi.conf #fastcgi相關引數的配置檔案 │ ├── fastcgi.conf.default #fastcgi配置檔案的備份檔案 │ ├── fastcgi_params #fastcgi引數檔案 │ ├── fastcgi_params.default │ ├── koi-utf │ ├── koi-win │ ├── mime.types #媒體型別 │ ├── mime.types.default │ ├── nginx.conf #nginx的主配置檔案 │ ├── nginx.conf.default #nginx的主配置檔案的備份檔案 │ ├── scgi_params #scgi相關引數檔案,一般不使用 │ ├── scgi_params.default │ ├── uwsgi_params #uwsgi相關引數檔案,一般不使用 │ ├── uwsgi_params.default │ └── win-utf ├── fastcgi_temp #fastcgi的臨時目錄 ├── html #頁面釋出目錄 │ ├── 50x.html #nginx的錯誤頁面 │ └── index.html #nginx的預設釋出頁面 ├── logs #nginx的日誌目錄 │ ├── access.log #訪問日誌 │ ├── error.log #錯誤日誌 │ └── nginx.pid #nginx的pid檔案 ├── proxy_temp #proxy的臨時目錄 ├── sbin #nignx的命令目錄 │ └── nginx #nginx的命令程式 │ ├── scgi_temp #臨時目錄 └── uwsgi_temp #臨時目錄
Nginx主配置檔案nginx.conf是一個純文字型別的檔案(其他配置檔案大多也是如此),它位於Nginx安裝目錄下的conf目錄中,整個配置檔案是以區塊的形式組織的。一般,每個區塊以一個大括號“{}”來表示,區塊可以分為幾個層次,整個配置檔案中,Main區位於最上層,在Main區下面可以有Events區、HTTP區等層級,在HTTP區中又包含有一個或多個server區,每個server區中又可有一個或多個location區,Nginx整個配置檔案nginx.conf的主體框架為:
主配置檔案結構:四部 main block:主配置段,即全域性配置段,對http,mail都有效 event { ... } 事件驅動相關的配置 http { ... } http/https 協議相關配置段 mail { ... } mail 協議相關配置段 stream { ... } stream 伺服器相關配置段
http配置
http { ... ... 各server的公共配置 server { 每個server用於定義一個虛擬主機 ... } server { ... server_name 虛擬主機名 root 主目錄 alias 路徑別名 location [OPERATOR] URL { 指定URL的特性 ... if CONDITION { ... } } } }
1 worker_processes 1; 2 error_log logs/error.log; 3 pid logs/nginx.pid; #第1到第3行為nginx的main區,nginx的核心功能模組 4 events { 5 worker_connections 1024; 6 } #第4到第6行為nginx的events區,nginx的核心功能模組 7 http { #從第7行開始往下全部為nginx的http區,nginx的http核心功能目錄 8 include mime.types; 7 default_type application/octet-stream; 9 sendfile on; 10 keepalive_timeout 65; 11 server { #從第11行到第22行為nginx的server區 12 listen 80; 13 server_name localhost; 14 location / { #從14行到17行為nginx的location區 15 root html; 16 index index.html index.htm; 17 } #從14行到17行為nginx的location區 18 error_page 500 502 503 504 /50x.html; 19 location = /50x.html { #從19行到21行為另外一個location區 20 root html; 21 }#從19行到21行為另外一個location區 22 } #從第11行到第22行為nginx的server區 23 } ##從第7行到此處全部為nginx的http區,nginx的http核心功能目錄
#定義Nginx執行的使用者和使用者組 user www www; #啟動程序,通常設定成和cpu的數量相等 worker_processes 8; #worker_processes auto; #為每個程序分配cpu,上例中將8個程序分配到8個cpu,當然可以寫多個,或者將一個程序分配到多個cpu。 worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000; #該指令是當一個nginx程序開啟的最多檔案描述符數目,理論值應該是最多開啟檔案數(ulimit -n)與nginx程序數相除,但是nginx分配請求並不是那麼均勻,所以最好與ulimit -n的值保持一致。 worker_rlimit_nofile 102400; #模組載入配置檔案 include /usr/share/nginx/modules/*.conf; #指明要載入的模組的路徑 /usr/lib64/nginx/modules/ #定worker程序的nice值,設定worker程序優先順序:[-20,20] worker_priority number; #全域性錯誤日誌及PID檔案 #錯誤日誌定義等級,[ debug | info | notice | warn | error | crit ] error_log /usr/local/nginx/logs/error.log info; #PId檔案 pid/usr/local/nginx/nginx.pid;
events { #epoll是多路複用IO(I/O Multiplexing)中的一種方式,但是僅用於linux2.6以上核心,可以大大提高nginx的效能。 use epoll; #單個後臺worker process程序的最大併發連結數 (最大連線數=連線數*程序數) worker_connections 10000; #儘可能多的接受請求. multi_accept on; #事件驅動相關的配置 #處理新的連線請求的方法;on指由各個worker輪流處理新請求,Off指每個新請求的到達都會通知(喚醒)所有的worker程序,但只有一個程序可#獲得連線,造成“驚群”,影響效能,預設值為off,可優化為on accept_mutex on | off; #此指令預設為off,即預設為一個worker程序只能一次接受一個新的網路連線, on表示每個woker程序可以同時接受所有新的網路連線 multi_accept on|off; #除錯和定位問題 #是否以守護程序方式執行,預設是on,即守護程序方式,off 用於除錯或docker環境 daemon on|off; #是否以master/worker模型執行nginx,預設為on,當指定off 將不啟動worker master_process on|off; }
#設定http伺服器,利用它的反向代理功能提供負載均衡支援 http { #設定mime型別,型別由mime.type檔案定義,在響應報文中將指定的副檔名對映至MIME對應的型別 include mime.types; #除上面指定的型別外,就為預設的MIME型別,瀏覽器一般會提示下載 default_type application/octet-stream; #瀏覽器直接開啟內容,不下載 #default_type test/html; #設定日誌格式,可以自定義 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/usr/local/nginx/log/nginx/access.log; #sendfile 指令指定 nginx 是否呼叫 sendfile 函式(zero copy 方式)來輸出檔案,對於普通應用必須設為 on #如果用來進行下載等應用磁碟IO重負載應用,可設定為 off,以平衡磁碟與網路I/O處理速度,降低系統的uptime。 #是否啟用sendfile功能,在核心中封裝報文直接傳送,預設Off sendfile on; #在開啟sendfile,on時合併響應頭和資料體在一個包中一起傳送 tcp_nopush on; #開啟目錄列表訪問,合適下載伺服器,預設關閉。 #autoindex on; #是否在響應報文中的Content-Type顯示指定的字符集,預設off不顯示 charset charset off; #是否在響應報文的Server首部顯示nginx版本 server_tokens on | off | build | string; #keepalive超時時間,客戶端到伺服器端的連線持續有效時間,當出現對伺服器的後繼請求時,keepalive-timeout功能可避免建立或重新建立連線。(節省伺服器資源、CPU、記憶體、網絡卡) keepalive_timeout 65; #keepalive超時時間內,客戶端到伺服器端的最大連線次數為100次,超過100次則重新建立連線。 keepalived_requests 100; #在keepalived模式下的連線是否啟用TCP_NODELAY選項,即Nagle演算法,當為off時,延遲傳送,每傳送一個包就需要確認ACK,才傳送下一個包,預設On時,不延遲傳送,多個包才確認一次性 tcp_nodelay on; #開啟gzip壓縮 gzip on; gzip_min_length 1k; gzip_buffers 4 128k; gzip_http_version 1.1; gzip_comp_level 4; #壓縮級別大小,最大為9,值越小,壓縮後比例越小,CPU處理更快。 #值越大,消耗CPU比較高。 gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; #允許客戶端請求的最大單檔案位元組數 client_max_body_size 10m; #緩衝區代理緩衝使用者端請求的最大位元組數 client_body_buffer_size 128k; #nginx跟後端伺服器連線超時時間(代理連線超時) proxy_connect_timeout 300; #後端伺服器資料回傳時間(代理髮送超時) proxy_send_timeout 300; #連線成功後,後端伺服器響應時間(代理接收超時) proxy_read_timeout 300; #設定代理伺服器(nginx)儲存使用者頭資訊的緩衝區大小 proxy_buffer_size 4k; #proxy_buffers緩衝區,網頁平均在32k以下的話,這樣設定 proxy_buffers 4 32k; #高負荷下緩衝大小(proxy_buffers*2) proxy_busy_buffers_size 64k; #設定請求緩衝 large_client_header_buffers 4 16k; #客戶端請求頭部的緩衝區大小,這個可以根據你的系統分頁大小來設定,一般一個請求的頭部大小不會超過1k #不過由於一般系統分頁都要大於1k,所以這裡設定為分頁大小。分頁大小可以用命令getconf PAGESIZE取得。 client_header_buffer_size 4k; #這個將為開啟檔案指定快取,預設是沒有啟用的,max指定快取數量,建議和開啟檔案數一致,inactive是指經過多長時間檔案沒被請求後刪除快取。 open_file_cache max=102400 inactive=20s; #這個是指多長時間檢查一次快取的有效資訊。 open_file_cache_valid 30s; #open_file_cache指令中的inactive引數時間內檔案的最少使用次數,如果超過這個數字,檔案描述符一直是在快取中開啟的,如上例,如果有一個檔案在inactive open_file_cache_min_uses 1; #包含其它配置檔案,如自定義的虛擬主機 include vhost/*.conf; }
四、nginx的虛擬主機配置說明
格式:
server { ... } 配置一個虛擬主機 server { listen address[:PORT]|PORT; server_name SERVER_NAME; root /PATH/TO/DOCUMENT_ROOT; } #listen PORT|address[:port]|unix:/PATH/TO/SOCKET_FILE #listen address[:port] [default_server] [ssl] [http2 | spdy] [backlog=number] [rcvbuf=size] [sndbuf=size]; #default_server 設定為預設虛擬主機,無法匹配虛擬主機時使用 #ssl 限制僅能夠通過ssl連線提供服務 #backlog=number 超過併發連線數後,新請求進入後援佇列的長度 #rcvbuf=size 接收緩衝區大小 #sndbuf=size 傳送緩衝區大小 #注意: #(1) 基於port; #listen PORT; 指令監聽在不同的埠 #(2) 基於ip的虛擬主機 #listen IP:PORT; IP 地址不同 #(3) 基於hostname #server_name fqdn; 指令指向不同的主機名 #server_name name ...; #虛擬主機的主機名稱後可跟多個由空白字元分隔的字串 #支援*通配任意長度的任意字元 #server_name *.magedu.com www.magedu.* #支援~起始的字元做正則表示式模式匹配,效能原因慎用 #server_name ~^www\d+\.magedu\.com$ #說明: \d 表示 [0-9] #匹配優先順序機制從高到低 #(1) 首先是字串精確匹配 如:www.magedu.com #(2) 左側*萬用字元 如:*.magedu.com #(3) 右側*萬用字元 如:www.magedu.* #(4) 正則表示式 如: ~^.*\.magedu\.com$ #(5) default_server #定義路徑相關的配置 #root #設定web資源的路徑對映;用於指明請求的URL所對應的文件的目錄路徑,可用於http, server, location, if in location #server { #... #root /data/www/vhost1; #} #示例 #http://www.magedu.com/images/logo.jpg #--> /data/www/vhosts/images/logo.jpg
案例
server { #監控的埠號 listen 80; #nginx_web站點的域名或ip地址 server_name https://www.cnblogs.com/yaokaka; location / { #該站點的資訊釋出目錄 root html; #index的檔案的格式 index index.html index.htm; } #錯誤頁面跳轉 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
如果想自定義響應報文的nginx版本資訊,需要修改原始碼檔案,重新編譯 如果server_tokens on,修改 src/core/nginx.h 修改第13-14行,如下示例 #define NGINX_VERSION "1.68.9" #define NGINX_VER "wanginx/" NGINX_VERSION 如果server_tokens off,修改 src/http/ngx_http_header_filter_module.c 第49行,如下示例: static char ngx_http_server_string[] = "Server: nginx" CRLF; 把其中的nginx改為自己想要的文字即可,如:yaowx