1. 程式人生 > >Nginx筆記02-nginx常用參數配置說明

Nginx筆記02-nginx常用參數配置說明

win 事件驅動 出現 有客 display 只需要 byte 系統資源 spa

nginx的主配置文件是nginx.conf,這裏主要針對這個文件進行說明

1.主配置文件nginx.conf

2.nginx配置文件的結構

從上面的配置文件中我們可以總結出nginx配置文件的基本結構

2.1 全局塊

全局塊是默認配置文件從開始到events之間的內容,主要設置一些影響nginx服務器運行的配置命令,作用域是nginx服務器全局,通常包括nginx的用戶和組,允許生成的work process數,nginx進程pid文件,日誌的路徑和類型、配置文件引入等

2.2 events塊

設計的明日您主要影響nginx服務器與用的的網絡連接。常用的設置包括是否開啟對多worker process下的網絡連接進行序列化,是否允許同時接收多個網絡連接,選取那種事件驅動模型處理連接請求,每個worker process同時支持的最大連接數。 這一部分的指令對於nginx的性能影響較大,在實際陰影中需要根據實際情況靈活配置。

2.3 http塊

這是nginx配置中的重要部分,代理、緩存和日誌等絕大多數功能和第三方模塊的配置都可以放在這個模塊中。http包含全局塊和下面的server塊、location塊。 http全局塊中配置的命令包括文件引入、MIME-Type定義,日誌自定義,是否使用sendfile傳輸文件,連接超時時間、單連接強求數上限等。

2.4 server塊

server塊配置和“虛擬主機”有密切聯系。 註意:在http全局塊中介紹的部分指令可以再server塊中和location塊中使用,只是作用域不同。 在server塊中,最常見的兩個配置項就是本虛擬主機的監聽配置和本虛擬主機的名稱或IP配置。

2.5 location塊

每個server中可以包含多個location塊,location塊的作用體現在實現nginx功能的靈活運用 它的主要作用是,基於nginx服務器接收到的請求字符串,對除虛擬主機名稱之外的字符串進行匹配,對特定的請求進行處理。地址定向、數據緩存和應答控制等功能都是在這部分實現的。許多第三方模塊的配置也是在這個塊中提供功能。

3.全局配置

3.1 允許生成的worker process數

worker process是nginx服務器處理高並發的關鍵,理論上說,它的值越大,可以值得並發處理量也就越多,但實際上還是要受到軟件本身、操作系統資源、硬件等的限制。 配置格式: number:制定可以生成的worker process數 auto:讓nginx自動檢測 默認的配置文件中,number=1 技術分享
如果將number改為3 技術分享 改為auto 技術分享

3.2 pid文件存放路徑

這個一般在進行編譯安裝的時候會進行指定,當然你也可以在配置文件中重新指定 配置格式: file是指定的pid文件路徑,默認情況下是在/var/run/nginx/nginx.pid 註意:文件路徑在這裏可以使用相對路徑,但是必須包含文件名。 此指令只能在全局塊中進行配置

3.3 錯誤日誌文件路徑

這個配置可以在全局塊、http、server中使用,只是作用域不同。 配置格式: nginx服務器的日誌支持輸出到某一固定的文件file或者輸出到標準錯誤輸出stderr;日誌級別可選,由高到低分為debug(需要在編譯安裝時配置--with-debug)、info、notice、warn、error、crit、alert、emerg等。 配置實例: 註意:nginx用戶一定要對指定的文件擁有讀寫權限,否則nginx -t會報錯。

3.4 引入其他配置文件

我們可能會引入其他的nginx配置或第三方模塊的配置引用到當前的主配置中。 配置格式: file支持相對路徑,此指令可以放在配置文件的任意地方。

4.events配置塊

4.1 網絡連接序列化問題

網絡連接中有一個“驚群”的問題,意思是,當某一時刻只有一個網絡連接的時候,多個睡眠的進程會被同時喚醒,但是只有一個進程可以獲得連接。如果每次喚醒的進程數目太多,會影響一部分系統性能。在nginx多進程的情況下,可能會出現這種問題。為了解決這個問題,nginx配置中包含了這樣一條指令---accept_mutex,當其設置為開啟的時候,將會對多個nginx進程接受連接進行序列化,防止多個進程之間的爭搶。 配置格式:

4.2 是否允許同時接受多個網絡連接

每個nginx的worker process多有同時接受多個新到達的網絡連接,但是要在配置文件中進行配置。 配置格式: 此指令默認為關閉狀態,只能在events中進行配置。

4.3 事件驅動模型的選擇

nginx支持多種事件驅動模型來處理網絡請求,包括select、poll、kqueue、epoll、rtsing、/dev/poll和eventport 配置格式: method為使用的驅動模型,只能在events中進行配置。

4.4 最大連接數

worker_connections主要用來設置允許每個worker process同時開啟的最大連接數。 配置格式: 默認值為512. 這裏的number不僅僅包括和前端用戶建立的連接數,而是包括所有可能的連接數。另外,numbers值不能大於錯做系統支持大開的最大句柄數。只能在events中配置。

5.http配置段

5.1 定義MIME-Type

在常用的瀏覽器中,可以顯示的內容喲HTML、XML、GIF及Flash等文本媒體類型,瀏覽器為區分這些資源,需要使用MIME Tyep。Nginx作為web服務器,必須能識別前端請求的資源類型。 在nginx的默認配置中,可以看到如下內容: 此指令可以在http/server/location中進行配置。

5.2 自定義訪問日誌

access_log記錄nginx服務器提供服務過程應答前端請求的日誌,支持對服務日誌的格式、大小、輸出等進行設置,需要使用兩個指令,分別是access_log和log_format指令 access_log配置格式: path:配置日誌文件的存放路徑和名稱 format:可選項,自定義服務日誌的格式字符串,也可以通過“格式串的名稱”使用log_format指令定義好的格式,“格式串的名稱”在log_format中定義。 size:配置臨時存放日誌的內存緩沖區大小 此指令可以在http/server/location塊中進行設置。默認的配置如下: 其中,main是log_format指令默認定義的日誌格式字符串的名稱。 如果要取消記錄服務日誌的功能: log_format是專門用於定義日誌格式,並且可以為格式字符串定義一個名字,以便於access_log指令可以直接調用 配置格式: name:格式字符串的名字 string:服務日誌的格式字符串,相關變量及含義可以參考官網文檔 示例: 輸出如下: $remote_addr:獲取用戶的IP地址 $time_local:服務器的時間 $request:獲取到請求為GET $status:請求狀態,200表示請求成功 $body_bytes_sent:獲取到請求體的大小為1334B $http_referer:http://192.168.61.130/index.php,請求的內容 $http_user_agent:獲取到用戶使用的是windows平臺的瀏覽器(內核)類型 註意:此指令只能在http中配置

5.3 配置允許sendfile方式傳輸文件

在Linux kernel2.2版本之後出現了一種叫做“零拷貝(zero-copy)”系統調用機制,目前很多應用服務器如apache、samba、nginx都支持sendfile。nginx在支持了sendfile系統調用後,避免了內核層與用戶層的上線文切換(content swith)工作,大大減少了系統性能的開銷。sendfile相關指令:sendfile和sendfile_max_chunk。 sendfile配置: 用於控制sendfile功能的開關,默認關閉。可以在http/server/location中配置。 sendfile_max_chunk配置: 其中,size值如果大於0,nginx進程的每個worker process每次調用sendfile()傳輸的數據量最大不能超過這個值,如果設置為0,則無限。默認設置為0。可以在http/server/location中配置。 示例:

5.4 配置連接超時時間

與用戶建立會話之後,nginx可以保持這些鏈接打開一段時間,指令keepalived_timeout就是用來設置此時間的 配置格式: timeout:服務器端對連接的保持時間。默認為65。 header_timeout:可選項,在應答報文頭部的Keep-Alive域設置超時時間:“Kepp-Alive:timeout=header_timeout”。報文中的這個指令可以被Mozilla和Konqueror識別。 可以配置在server、location中 示例: 其含義是,在服務器端保持連接的時間設置為120s,發給用戶端的應答報文頭部中Kepp-Alive域的超時時間為100s。 可以配置在http/server/location中。

5.5 單連接請求上限數

nginx服務器端和用戶端建立會話連接後,用戶端通過此連接發送請求,指令keepalive_requests用於限制用戶通過某一連接線nginx發送請求的次數。 配置格式如下: 默認值為100,可以在server和location中。

5.6 配置監聽

配置監聽使用listen指令,常用的有兩種配置方法 第一種:配置監聽的ip地址 第二種:配置監聽端口 address:監聽的IP地址,如果是IPV6地址,需要用中括號“[]”括起來。 port:端口號,如果只是定義了IP地址,沒有定義端口號,就使用80端口 default_server:標識符,將此虛擬主機設置為address:port的默認主機。 setfib=number:老版本使用,現不常用 backlog=number:設置監聽函數listen()最多允許多少網絡連接同時處於掛機狀態,在FreeBSD中默認為-1,其他平臺為511 rcvbuf=size:設置監聽socket接收緩存區大小 sndbuf=size:設置監聽socket發送緩存區大小 deferred:標識符,將accept()設置為Deferred模式 accept_filter=filter:設置監聽端口對請求的過濾,被過濾的內容不能被接受和處理。這個功能只在FreeBSD和NetBSD中可用。 bind:標識符,使用獨立的bind()處理此address:port ssl:標識符,設置會話連接使用SSL模式運行,與HTTPS服務有關。 示例: 監聽所有80和8000端口

6.配置location塊

location的配置語法: 其中,uri變量是待匹配的請求字符串,可以使不放正則表達式的字符串,如index.php等;也可以是包含正則的字符串,如\.php$(表示以.php結尾的URL)等。 其中,方括號中的內容是可選項,用來改變請求字符串與uri的匹配方式。在不添加此選項時,nginx服務器首先在server塊的多個location塊中搜索是否有標準uri字符串匹配,如果有多個可以匹配,就記錄匹配度最高的一個。然後,服務器在用location塊中的正則uri和請求字符串匹配,當第一個正則uri匹配成功,結束搜索,並使用這個location塊處理請求;如果正則匹配全部失敗,就是用剛才記錄的匹配度最高的location塊處理此請求。 下面是各個標識符的含義: “=”:用於標準uri前,要求請求字符串與uri嚴格匹配。如果已經匹配成功,就停止繼續向下搜索並立即處理此請求。 “~”:用於表示uri包含正則表達式,並且區分大小寫 “~*”:用於表示uri包含正則表達式,並且不區分大小寫 “~^”:用於標準uri之前,要求nginx服務器找到標識uri和請求字符串匹配度最高的location後,立即使用此location處理請求,而不再使用location塊中的正則uri和請求字符串做匹配。

6.1 配置請求的根目錄root

web服務器接收到請求之後,首先要在服務器端指定目錄中尋找請求資源。在nginx服務器中,指令root就是用來配置這個根目錄的,配置結構如下: 示例: 表示當location塊接收到/zabbix的請求時,將會在/var/lib/zabbix目錄下尋找index.php響應請求。 可以在http/server/location中配置,一般在location中。

6.2 更改location的uri

在location塊中,除了使用root指令指明請求處理根目錄,還可以使用alias指令改變location接收到的URI的請求路徑,其語法結構如下: 其中,path為修改後的根路徑。 示例: 當此location塊接收到“/data/index.htm”請求時,匹配成功,之後根據alias指令的配置,nginx服務器將到/location1/test/other目錄下找到index.htm並相應請求。可以看到,通過alias指令的配置,根路徑已經從/data更改為/location1/other了。

6.3 設置網站的默認首頁index

指令index用於設置網站的默認首頁,它一般由兩個作用:1.用戶在發出請求訪問網站時,請求地址可以不寫首頁名稱;2.可以對一個請求,根據其請求內容而設置不同的首頁。 配置結構: 其中file變量可以包含多個文件名,其間使用空格分隔,也可以包含其他變量。此變量默認為indx.html。 示例: 當location塊接收到“/data/location/web”時,匹配成功,他首先將預置變量$1置為“locationtest”,然後在/data/locationtest/web路徑下按照index的配置順序依次尋找index.locationtest.html頁,index.my1.html頁,和index.html頁,首先找到那個頁面,就使用哪個頁面響應請求。

6.4 設置錯誤頁面

如果用戶端嘗試查看網頁時出現錯誤,服務器會將HTTP錯誤從網站發送到web瀏覽器。如果無法顯示網頁,web瀏覽器會顯示網站發送的實際錯誤網頁或web瀏覽器內置的友好錯誤消息。nginx支持自定義錯誤頁面的內容。可以通過這一功能,在網站發生錯誤時為用戶提供人性化錯誤界面顯示。 一般來說,HTTP 2XX表示請求正常,HTTP 3XX表示網站重定向,HTTP 4XX表示客戶端出現錯誤,HTTP 5XX代表服務器端出現錯誤。 配置格式: code:要處理的HTTP錯誤代碼 response:可選項,將code指定的錯誤代碼轉化為新的response。 uri:錯誤頁面的路徑或者網站地址。 示例: 在上面的是李總可以看到,變量uri實際上是一個相對與nginx服務器安裝路徑的相對路徑。如果不想將錯誤頁面放到nginx服務器的安裝路徑下管理,只需要另外使用一個location塊定向錯誤頁面到新的路徑下即可。 error_page指令可以在http、server、location中使用。

7.認證功能配置

7.1 基於IP配置nginx的訪問權限

nignx配置通過兩種途徑支持基本訪問權限的控制,其中一種是由HTTP標準模塊ngx_http_access_module支持的,其通過IP來判斷是否擁有對nginx的訪問權限。 allow指令,用於設置允許訪問nginx的客戶端IP,配置結構如下: address:允許訪問的客戶端IP,不支持同時設置多個,如果有多個IP需要設置,需要重復使用allow指令。 CIDR:允許訪問的客戶端的CIDR地址,例如202.80.18.23/25,前面是32位IP地址,後面“/25”代表該IP地址中前25位是網絡部分,其余位代表主機部分。 all:代表允許所有客戶端訪問 另一個是deny指令,用於設置禁止訪問nginx的客戶端地址,配置結構: 配置示例: 首先禁止192.168.1.1訪問,然後允許192.168.0.1/24網段訪問,然後是禁止其他所有的ip訪問,匹配順序是從上向下。

7.2 基於密碼配置nginx的訪問權限

nginx還支持基於http basic authentication協議的認證。需要識別用戶名和密碼,認證失敗的客戶端沒有訪問權限,該功能由http標準模塊ngx_http_auth_basic_module支持。 auth_basic指令,用於開關認證功能。 string:開啟該認證功能,並配置驗證時的指示信息。 off:關閉認證功能。 auth_basic_user_file,用於設置包含用戶名和密碼信息的文件路徑,配置結構如下: 其中file問認證文件的絕對路徑。 這裏的密碼文件支持明文和密碼加密後的文件,明文格式如下: 加密密碼可以使用crypt()函數進行密碼加密的格式,在linux上可以使用htpasswd命令生成,在PHP和perl中,也提供crypt()函數。 示例: 運行後輸入密碼即可。

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">



來自為知筆記(Wiz)



Nginx筆記02-nginx常用參數配置說明