1. 程式人生 > 實用技巧 >六、nginx的配置檔案說明

六、nginx的配置檔案說明

一、nginx的目錄結構

[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主配置檔案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 {
                     ...
               }
          }
      }
}

去掉了空格與註釋的nginx主配置檔案資訊

egerp -v "#|^$" /usr/local/nginx/conf/nginx.conf

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主配置檔案(nginx.conf)引數說明(不包含虛擬主機配置)

#定義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的版本資訊

如果想自定義響應報文的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