整理的一個nginx.conf的配置,不包括server節點介紹
原文請查看,Nginx配置文件(nginx.conf)配置詳解
# For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/ # * Official Russian Documentation: http://nginx.org/ru/docs/ #nginx用戶及組,window下不指定。user用戶 組 ; user nginx; #nginx的工作進程數,數目。根據硬件調整,通常等於CPU數量或者2倍於CPU。 worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; #指定進程可以打開的最大描述符,我這里設置int最大值,可不設置 #worker_rlimit_nofile 65535; # Load dynamic modules. See /usr/share/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf; events { # 每個工作進程的最大連接數量。根據硬件調整,和前面工作進程配合起來用,盡量大,但是別把cpu跑到100%就行。 # 每個進程允許的最多連接數,理論上每台nginx服務器的最大連接數為。worker_processes*worker_connections worker_connections 1024; # 使用epoll的I/O 模型。linux建議epoll,FreeBSD建議采用kqueue,window下不指定。 # 不知道Nginx該使用哪種輪詢方法的話,它會選擇一個最適合你操作系統的 use epoll; # 告訴nginx收到一個新連接通知后接受盡可能多的連接。 multi_accept on; #keepalive超時時間。 keepalive_timeout 60; #客戶端請求頭部的緩沖區大小。這個可以根據你的系統分頁大小來設置,一般一個請求頭的大小不會超過1k,不過由於一般系統分頁都要大於1k,所以這里設置為分頁大小。 #分頁大小可以用命令getconf PAGESIZE 取得。client_header_buffer_size該值必須設置為“系統分頁大小”的整倍數。 client_header_buffer_size 4k; # 為打開文件指定緩存,默認是沒有啟用的, # max指定緩存數量,建議和打開文件數一致, # inactive是指經過多長時間文件沒被請求后刪除緩存。 open_file_cache max=65535 inactive=60s; # 多長時間檢查一次緩存的有效信息。 open_file_cache_valid 80s; # open_file_cache指令中的inactive參數時間內文件的最少使用次數, # 如果超過這個數字,文件描述符一直是在緩存中打開的, # 如上例,如果有一個文件在inactive時間內一次沒被使用,它將被移除 open_file_cache_min_uses 1; } # 設定http服務器,利用它的反向代理功能提供負載均衡支持 http { #設置日志記錄格式, # 遠程訪問地址-訪問主機名[訪問時間] url和http協議 # 請求狀態 requestBody內容大小 那個頁面鏈接訪問過來 # 客戶瀏覽器的相關信息 http forward頭部ip地址 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 /var/log/nginx/access.log main; # 保存服務器名字的hash表是由指令server_names_hash_max_size 和server_names_hash_bucket_size所控制的 # 如果需要增大hash max size 或 hash bucket size,我們需要增大server_names_hash_max_size的值 server_names_hash_bucket_size 128; # 客戶端請求頭部的緩沖區大小 client_header_buffer_size 4k; # 客戶端請求頭的緩沖區的最大數量和大小 large_client_header_buffers 8 128k; open_file_cache max=102400 inactive=20s; #設定通過nginx上傳文件的大小 client_max_body_size 300m; #指定 nginx 是否調用sendfile 函數(zero copy 方式)來輸出文件。普通應用,必須設為on #用來進行下載等應用磁盤IO重負載應用,可設置為off,以平衡磁盤與網絡IO處理速度,降低系統uptime sendfile on; #此選項允許或禁止使用socke的TCP_CORK的選項,此選項僅在使用sendfile的時候使用 tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; #代理服務器連接的超時時間_發起握手等候響應超時時間 proxy_connect_timeout 90; #連接成功后_等候后端服務器響應時間_其實已經進入后端的排隊之中等候處理(也可以說是后端服務器處理請求的時間) proxy_read_timeout 180; #后端服務器數據回傳時間_就是在規定時間之內后端服務器必須傳完所有的數據 proxy_send_timeout 180; # 設置從被代理服務器讀取的第一部分應答的緩沖區大小,通常情況下這部分應答中包含一個小的應答頭。 # 默認情況下這個值的大小為指令proxy_buffers中指定的一個緩沖區的大小 proxy_buffer_size 256k; # 設置用於讀取應答(來自被代理服務器)的緩沖區數目和大小,默認情況也為分頁大小 proxy_buffers 4 256k; #設置在寫入proxy_temp_path時數據的大小,預防一個工作進程在傳遞文件時阻塞太長 proxy_busy_buffers_size 256k; proxy_temp_file_write_size 256k; proxy_temp_path /data0/proxy_temp_dir; # proxy_temp_path和proxy_cache_path指定的路徑必須在同一分區 # 設置內存緩存空間大小為200MB,1天沒有被訪問的內容自動清除,硬盤緩存空間大小為30GB。 proxy_cache_path /data0/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g; # 如果把它設置為比較大的數值,例如256k,那么,無論使用firefox還是IE瀏覽器,來提交任意小於256k的圖片,都很正常 # 默認的client_body_buffer_size設置,也就是操作系統頁面大小的兩倍,8k或者16k,再提交256k圖片則會報500異常 client_body_buffer_size 512k; # 默認為off , 表示使nginx阻止HTTP應答代碼為400或者更高的應答。指定的error_page錯誤頁面才能生效 proxy_intercept_errors on # 設定mime類型,類型由mime.type文件定義 include /etc/nginx/mime.types; default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf; server { listen 80 default_server; listen [::]:80 default_server; server_name _;
#這是一個無效的域名,默認訪問http://localhost時,如果找不到匹配的域名,則會訪問第一個server節點,可以取任意匹配不到的字符串
#比如可以設置server_name s; ,,這個也可以使用localhost正確訪問到nginx歡迎頁面 root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } # Settings for a TLS enabled server. # # server { # listen 443 ssl http2 default_server; # listen [::]:443 ssl http2 default_server; # server_name _; # root /usr/share/nginx/html; # # ssl_certificate "/etc/pki/nginx/server.crt"; # ssl_certificate_key "/etc/pki/nginx/private/server.key"; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 10m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # # # Load configuration files for the default server block. # include /etc/nginx/default.d/*.conf; # # location / { # } # # error_page 404 /404.html; # location = /40x.html { # } # # error_page 500 502 503 504 /50x.html; # location = /50x.html { # } # } }
2018.12.18增加額外的gzip模塊
gzip模塊壓縮指定格式文件,以減小傳輸帶寬
作用域:http,server,Location
可以在http節點下配置,或server節點下配置,nginx的配置是內層高於外層,
如果gzip模塊在http下關閉gzip off, 而server開啟的gzip on ,最后是由內層的server決定生效,開啟gzip模塊
gzip配置參數:
http { # gzip默認開啟,默認作用於text/html格式的文件(后綴html htm shtml默認壓縮),可以自定義gzip_types設置想要壓縮的文件格式 gzip on; # 設置壓縮響應所需的最小http協議版本1.1或1.0,默認值是1.1 gzip_http_version 1.1; # 指定允許壓縮的文件類型,文本內容css,xml,json,javascript可以進行壓縮 gzip_types text/plain text/css application/xml application/json text/javascript application/javascript application/x-javascript application/xml+rss; # nginx作為反向代理時候設置哪個條件啟動gzip gzip_proxied expired no-cache no-store private auth; # gzip_disable的設置是禁用IE6的gzip壓縮 gzip_disable "MSIE [1-6]\."; # 指定壓縮的文件最小尺寸,單位 bytes 字節,低於該值的不壓縮,超過該值的將被壓縮 gzip_min_length 1k; # 以16k為單位,按照原始數據大小以16k為單位的4倍申請內存,默認值是申請跟原始數據相同大小的內存空間去存儲gzip壓縮結果。 gzip_buffers 4 16k; # 指定壓縮等級,其值從1到9,數字越大,壓縮率越高,越消耗CPU,負載也越高 # 一般使用1-4等級 gzip_comp_level 2; # 增加響應頭Vary:Accept-Encoding,可以根據頭信息返回壓縮和非壓縮副本 gzip_vary on; }
額外補充
gzip_proxied expired no-cache no-store private auth;
指定當nginx作為代理服務器時,哪些條件下啟動gzip
# Nginx作為反向代理的時候啟用,開啟或者關閉后端服務器返回的結果,匹配的前提是后端服務器必須要返回包含"Via"的 header頭。 # off - 關閉所有的代理結果數據的壓縮 # expired - 啟用壓縮,如果header頭中包含 "Expires" 頭信息 # no-cache - 啟用壓縮,如果header頭中包含 "Cache-Control:no-cache" 頭信息 # no-store - 啟用壓縮,如果header頭中包含 "Cache-Control:no-store" 頭信息 # private - 啟用壓縮,如果header頭中包含 "Cache-Control:private" 頭信息 # no_last_modified - 啟用壓縮,如果header頭中不包含 "Last-Modified" 頭信息 # no_etag - 啟用壓縮 ,如果header頭中不包含 "ETag" 頭信息 # auth - 啟用壓縮 , 如果header頭中包含 "Authorization" 頭信息 # any - 無條件啟用壓縮
via請求頭是用來通知中間網關或代理服務器地址,Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
via響應頭告知代理客戶端響應是通過哪里發送的,Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
gzip_disable “MSIE [1-6]\.”
指定那個在哪個瀏覽器上不使用gzip壓縮,MSIE是IE1-6的瀏覽器發送請求時,User-Agent中攜帶的瀏覽器標識,指定ie6及以下瀏覽器不使用gzip壓縮
gzip_vary on
啟用應答頭"Vary: Accept-Encoding"告訴代理服務器緩存兩種版本的資源:壓縮和非壓縮,這有助於一些公共代理不能正確檢測到 content-encoding:gzip 響應頭的信息
正常的請求響應邏輯

客戶端和服務器之間直接請求響應過程。因為上面nginx服務器使用gzip壓縮的最小支持是http1.1,所以這個請求響應過程沒有問題
而如果客戶端和服務器之間有代理服務器,代理服務器到服務器使用的是http/1.0協議,結果服務器返回的是非壓縮副本資源到代理服務器,代理服務器再轉到客戶端。
結果是這個gzip功能沒有生效。過程如下圖
所以,如果在有代理服務器,網關的情況下,要使用gzip壓縮,則需要將gzip_http_version改為1.0
