nginx 配置介紹(一)

全局配置置與頂層配置塊

nginx.conf從整體上講分全局配置main, 頂層配置塊及子配置塊放在配置文件中,不用{}括起來的部分是全局配置,第一層用{}括起來的是頂層配置塊,在頂層配置塊中,再用{}括起來的是子配置塊頂層配置塊目前有http event stream。

main 全局配置

全局配置是Nginx在運行時與具體業務功能(如HTTP服務或者E-mail服務代理)無關的一些參數,如工作進程數、運行的身份等全局配置在配置文件最外層

1.工作進程數

語法:worker_processes number I auto;

默認worker_process 1;

配置塊 全局

說明:在配置文件的全局main 部分,管理進程接收任務並將請求分配給作進程處理,工作進程是實際的處理進程工作進程的個數可以設置爲CPU 的核數(grep ^processor/proc/cpuinfoIwe -1),也可以是auto值,如果開啓了ss l gzip 更應該設置成與邏輯CPU數量一樣甚至爲2 倍,可以減少I/ O 操作如果Nginx服務器還有其他服務,可以考慮適當減少

2.綁定工作進程到指定的CPU 內核

語法worker cpu affinity cpumask[ cpumask .. ·]

默認

配置塊:全局

說明:如果CPU 非常繁忙,不一定會把每一個工作進程分配到個核心上,通過本指令手工指定會得到真正的併發(僅對Linux有效)例如:

worker_processes 4;

worker_cpu_affinity 1000 0100 0010 0001;

3.工作進程最大打開文件數

語法:worker rlimit nofile number;

認:

置塊 全局

說明: 改變作進程最大文件數,修改配置無須重啓管理進程

4. 工作進程的當前工作路徑

語法worker_directory directory;

認:

置塊 全局

說明: 當前作進作路徑,主要用於生成coredump 文件, 作進程所

組需要對工作目錄有寫權限

5. 工作進程優先級

語法:worker_priority number;

認:worker_priority O;

塊: 全局

說明: 作進的優先級,取值範圍爲-20 20

6. coredump 文件最大尺寸

語法worker rlimit core size;

認:

置塊全局

說明:定義工作進cored ump 文件尺寸,改動無須重啓管理進程

7 . 是否以守護進程方式運行Nginx

語法:daemon onloff;

認:daemon on ;

配置塊 全局

說明:指明是否以守護進程方式運行Nginx ,默認爲打開

8. 是否以master_process 方式工作

語法:master_process onloff;

默認:master process on;

配置塊:全局

說明:指明工作進程是否馬上啓動,主要用於Nginx 深度開發使用,不是常規配置功能項

9. error 日誌設置

語法:error log /path/file level;

默認:error_log logs/error.log err;

配置塊 main http mail stream server location

說明:設置日誌文件路徑名,還可以設置要寫入的錯誤級別

10. 定義環境變量

語法:env VARIVAR=Value;

配置塊:全局

說明:直接設置操作系統上的環境變量例如:

env MACCOC OPTIONS;

env PERLSLIB=/data/site/modules;

env OPENSSL ALLOW PROXY CERTS=l;

11. 引用其他配置文件

語法:include / path/file;

默認

配置塊: any 

說明:文件名可以是絕對路徑,也可以是相對路徑,如果是相對路徑,就是nginx.conf所在的路徑例如:

include mime.types;

include /usr/local/ip_limit.conf;

12. 鎖定文件

語法:lock file file;

默認lock file logs/nginx.lock;

配置塊:全局

說明: Nginx 使用鎖定文件accept_mutex 在多數系統上,這個鎖用原子操作實現,則這個值就被忽略掉這個配置在使用lock file 機制的系統上使用

13 . 設置pid 文件路徑

語法pid path/file;

默認:pid logs/nginx.pid;

配置塊 main

說明:設保存管理進程ID 的文件,用於使用進程ID 操作Nginx 的環境

14. 設置工作進程運行時的用戶及用戶組

語法:user username[groupn ne];

默認:user nobody;

配置塊: main

說明:指定作進程作時的用戶和用戶組,主要在Linux UNIX 上使用

15. SSL 硬件加速

語法ssl一engine device;

說明:如果服務器上有SSL 硬件加速設備,可以通過配置實現硬件加速可以使用Open SSL 令查看是否有硬件設備:openssl engine  -t;

16. 工作進程中多線程讀和寫的線程池

語法thread_pool name threads=number [max_queue=number];

默認:thread pool default threads=32 max queue=65535;

配置塊: main

說明:這條指令從1.7.1 l 版本出現,定義工作進程中對文件讀和寫時用到的線程threads 參數定義線程池中線程的數max_queue 限制允許在隊列中等待的任務,默65 536 個任隊列超出時,任務將返回個錯誤信息

17. 工作進程時間頻率

語法:timer resolution interval;

默認

配置塊 main

說明:早期的Linux 中, gettimeofday 是一個系統調用,需要進行次核心態和用戶態的切換,所以需要限制現在的內核中,gettimeofday 是一次vsysc all 是對共享內存中的數據做訪問,代價不大,所以目前通常不需要考慮這個問題

events 配置塊

events 模塊中包含Nginx 中所有處理連接的設events Nginx 使用到的I/O 事件模型,是最主要的進出交互部分Nginx 強大的部分就是在Linux 上完美實現了e poll 模型這裏定義events 模型選擇和參數

常用配置項如下

events{
    use epoll;
    worker connections 20000;
}

1. 設置事件模型

語法:use method;

默認 

配置塊: events

說明: method 取值爲[ kqueue I rtsig I epoll I /dev/poll I select I poll ]; 指令用於確定使用的事件模型, 般在Linux 下用epoll 如果不設置本值, Nginx 會自動確定件模型

( 1 )標準事件模型

select poll 屬於標準事件模型,如果當前系統不存在更有效的方法, Nginx 會選擇select poll

( 2 )高效事件模型

kqueue :用於FreeBSD 4 .1+ OpenBSD 2.9 NetBSD 2 . 0 Mac OS X 使用雙處理器的Mac OS X 系統使用kqueue 可能會造成內核崩潰

epoll :用於Linux 內核2.6 版本及以後的系統

/dev / poll :用於Solaris 7 11199 HPJX 11.22+ (eventport)、IRIX 6.5.15 +和Tru64 UNIX5.lA+

eventport :用於Solaris 10 爲了防止出現內核崩潰的問題,有必要安裝安全補丁程序

查看linux 版本號可以使用cat /proc/version 命令

2. 每個工作進程的最大連接數

語法:worker connections number;

默認:worker connections 512;

配置塊: event

說明:寫在events 部分,指每一個工作進程能併發處理(發起)的最大連接數(包含與客戶端或後端被代理服務器間等所有連接數) Nginx 作爲反向代理服務器時,計算公式爲最大連接數= worker _processes °¡ worker_ connections/4 ,所以這裏客戶端最大連接數1024 ,這個可以增大到8192 看情況而定,但不能超過worker_rlimit_ nofile Nginx 作爲http 服務器時,以上計算公式裏面改爲除以2

3. 工作進程併發接收

語法:multi_accept onioff;

默認:multi_accept off;

配置塊: events

說明:如果multi_accept 是禁用的, 一個工作進程同一時刻只能接收一個新的連接,否則,可以在同一時刻接收所有的連接當類型是kqueue 時,這個配置指令會被自動忽略

4. AIO 最大輸出數

語法:worker_aio_requests number;

默認:worker aio request 32;

配置塊: event s

說明:當在epoll 連接處理方法使用AIO 時,設置單作進程AIO 輸出的最大數

HTTP服務器配置塊

HTTP 模塊是Nginx 重要的模塊,顧名思義 這是處理HTTP 請求的模塊HTTP 模塊中般使用HTTP 全局配置參數控制整體行爲,使用server 虛擬主機,包含監地址、文檔路徑和各location 反向代理、負載均衡都是在內部ser v er 等模塊實現的同時在各個子配置塊或location 內部劃分了許多階段( phase ),這些階段可以註冊Lua 代碼或Lua 文件,干預處理的過程個典型Web 務器會含全局配置多個serve r 塊和多個l oca tion

http{
    gzip on;
    upstream{
       …
    }
     …
    server{
        listen localhost:80;
            …
        location /webstatic {
            if ... {
                …
            }
            root /opt/webresource;
            …
        }
        location ~* . (jpg Jjpeg I png I jpe I gif) $ {
            …
        }
    }
    server{
       …
    }
}

Nginx Web 服務器提供了很多配置項, 這些配置項有的可以出現在任意一個配置塊中, 有的只能在特定的塊中, 這點在查看配置項描述時需要注意下。

1.監聽端口

語法:listen address[ :port] [default_server] [ssl] [http2 I spdy] [proxy_protocol]
[ setfib=number] [ fastopen=number] [ backlog=number] [ rcvbuf=size] [ sndbuf=size]
[ accept_filter=filter] [deferred] [bind] [ ipv6only=on I off] [reuseport] [ so_keepalive
=on I off I [ keepidle]: [ keepintvl]: [ keepcnt]];
listen port [default_server] [ssl] [http2 I spdy] [proxy_protocol] [setfib=number]
[fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter]
[deferred] [bind] [ ipv6only=on I off] [reuseport] [ so_keepalive=on I off I [keepidle]: [kee
pintvl] : [ keepcnt] ] ;
listen unix:path [default_server] [ssl] [http2 I spdy] [proxy_protocol]
[backlog=number] [rcvbuf=size ] [sndbuf=size] [accept_filter=filter] [deferred] [bind]
[so_ keepalive=on I off I [ keepidle]: [ keepintvl] : [ keepcnt]];

默認:listen *:80 I *:8000;

配置塊: server

說明: listen 參數決定Ng inx 如何監聽端口listen 後面可以只加IP 、端口或主機名,非常靈活例如:

listen 127.0.0.1:8000;
listen 127.0 .0.1;
listen 8000;
listen *:8000;
listen localhost:8000;

如果使用IPv6 ,那麼可以這樣使用:

listen [::]:8000;
listen [ : : l] ;

還可以加其他參數:

listen 127.0.0.1 default_server accept_filter=dataready backlog=1024;

主要參數的意義如下:

default :將所在的server 塊作爲整個Web 服務的默認server 如果沒有設置這個參數,將以找到的第server 塊爲默認server

default server :同default

backlog=num :表示TCP backlog 隊列大小,默認爲一1 ,表示不設TCP 次握手過程中,進程還沒有開始處理監聽句柄, backlog 隊列就會放置這些新連接如果隊列已滿,新的客戶嘗試連接,則會失敗

rcvbuf=s ize 設置s o rcvbuf 接收緩衝區大

sndbuf=size :設置so sndbuf 發送緩衝區大小

accept_ filter :設accept 過濾器,只對FreeBSD 操作系統有用

deferred 設置本參數後,客戶端建立連接,並且完成了次握手,也不會調度工作進程來處理,直到客戶端實際請求數據到來才分配工作進程處理,適用於大併發情況下減輕作進程負擔

• bind :綁定當前ip/port 對, 只有在一個端口監聽多個地址時纔會生效

ssl 在當前監聽的端口上建立的連接必須使用SSL

2. 主機名稱

語法:server name name[ ... ];

默認:server name "”;

配置塊: server

說明: server name 後可以跟多個主機名稱例如:server_name www.google.com mail.google.com;

3. location

語法:location[= I~I~* I^~I@] /uri/ { ... }

配置塊: server

說明: location 嘗試根據用戶請求中的URI 匹配上面的/uri 表達式,如果匹配,就選擇

location 中的配置處理用戶請求匹配的方式有很多種,下面介紹匹配規則

1 ) =表示把URI 作爲字符串,以便與參數中的uri 完全匹配例如:

location =  {

# 只有當用戶請求,纔會作用本location 下的配置

…

}

2~表示匹配URI 時是大小寫敏感的

3)  ~*表示匹配URI 是大寫不敏感的

4~表示匹配時只需要前半部分與URI 匹配即例如:

Location ^~/image/{

# 以/ image / 開始的請求都會匹配上

…

}

5 )@表示僅用於Nginx 服務內部請求之間重定向,又名命名location (named location 可以在URI 中使用正則表達式,例如:

Location ~* \.(gif | jpg| jpeg)${

# 匹配以.gif 、. jpg 、. jpeg 結尾的請求

}

location 是有順序的,當一個請求可以匹配多個location 時只會被第一個匹配的location 處location 的匹配只能表達如果匹配, …… 果需要匹配果不匹配,則……較難實現在最後一個/ location 前面都沒有匹配上,則 處理

4 設置root 路徑

語法:root path

認:html

配置塊 http server location if

例如,定義資源文件相對於HTTP 請求的根目錄

location /download/{

    root /opt/web/html/;

}

果有URI 是/download / index /test.html ,那麼Web 務器會返回服務器上/opt/web/html /download/ index / test.html 件的內

5. 以別名方式設置資源路徑

語法:alias path;

配置塊 location

明: alias 來設置文資源的, root 點在於如何解location 後面的uri 參數, alia s root 同的方式將用戶請映射到真正磁盤文件上例如,有個請求URI 是/conf/ nging.co 實際文在/usr/ local /nginx/conf/ nginx.conf ,那麼可使用下方式設置 

location /conf {

    alias /usr/local / nginx/conf/;

}

果用root 設置,則

location /conf {

    root  /usr/local/nginx

}

alias 後面表達式,例如:

location ~^ / test/(\w+)\.(\w+)${

    alias /usr/local/nginx/$2/$1.$2;

}

在請求/test/ nging.conf 時, 會返usr/ local/nginx/ conf/nginx.conf 文件的內root 和alias 配置塊不 root 使用更廣

6. 首頁

語法:index file ... ;

默認:index index.html;

配置塊: http server location

說明:如果訪站點的URI 是/, 般返回網站首頁i nd ex 後面可以跟多個參數,Nginx 按照順序訪這些文例如

location /{

    root path;

    index /index.html /html/index.php / index.asp;

}

7 . 根據HTTP 返回碼重定向頁面

語法:error_page code[code ... ][=l=answer-code ]uri l @named_location

配置塊 http server location if

說明 當某請求返回錯誤碼時, 如果匹配上了error_page 中設置的頁面,則重定向到新URI 例如:

error_page   404    /404.html

error_page 502 503 504  /50x.html

error_page 403   /http://example.com.forbidden.html

error_page 404  =@fetch;

雖然重定URI 但返回HTTP 錯誤碼還是原來的值,可以使用=更改返回的錯誤碼如:

error page 404 =200 /empty.gif;

error page 404 =403 /forbidden.gif;

果不URI ,只想重定向到location 中處理,可以這樣設置

location / {

           error_page 404 @fallback;

}

location @fallback {

           proxy_pass  http://backend;

}

中, 404 請求會被反向代http ://backend 上游服務器中

8. 是否允許遞歸使用error_page

語法recursive_error_pages[onloff];

認:recursive error pages off;

塊: http server location

說明: 是否許遞歸定error_page

9. try_ files

語法:try files pathl [path2] uri;

配置塊 s erver location

try _fies 後要若干徑,最後必須要有uri 參數,表示嘗試按照順訪問

path ,如可以效地取, 就直接向用戶返回這個path 對應的文件結束求,

繼續向下訪問都找,就定向到最後uri 上, 所以這個uri 存在,而且應該

是可有效重定向的例如:

try files /system/maintenance.html $uri $uri / index.html $uri.html @other;

location @other{

    proxy pass http://backend;

}

可以error_pag 巳配使用例如:

location  {

    try files $uri $uri/ /error.php?c=404 =404;

}

 

未完待續。。。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章