Nginx 配置詳細文件

<div class="article-body kancloud-markdown-body"><h3>概述</h3>
<p>Nginx 是使用一個 master 進程來管理多個 worker 進程提供服務。master 負責管理 worker 進程,而 worker 進程則提供真正的客戶服務,worker 進程的數量通常跟服務器上 CPU 的核心數相同,worker 之間經過一些進程間通訊機制實現負載均衡等功能。Nginx 進程之間的關係可由下圖表示:</p>
<p><img src="https://box.kancloud.cn/2016-...; alt=""></p>
<p>Nginx 服務啓動時會讀入配置文件,後續的行爲則按照配置文件中的指令進行。Nginx 的配置文件是純文本文件,默認安裝 Nginx 後,其配置文件均在 /usr/local/nginx/conf/ 目錄下。其中,nginx.conf  爲主配置文件。配置文件中以 # 開始的行,或者是前面有若干空格或者 TAB 鍵,而後再跟 # 的行,都被認爲是註釋。這裏只是瞭解主配置文件的結構。</p>
<p>Nginx 配置文件是以 block(塊)形式組織,每一個 block 都是以一個塊名字和一對大括號 「{}」 表示組成,block 分爲幾個層級,整個配置文件爲 main 層級,即最大的層級;在 main 層級下能夠有 event、http 、mail 等層級,而 http 中又會有 server block,server block中能夠包含 location block。即塊之間是能夠嵌套的,內層塊繼承外層塊。最基本的配置項語法格式是「配置項名  配置項值1  配置項值2  配置項值3  ... 」;</p>
<p>每一個層級能夠有本身的指令(Directive),例如 worker_processes 是一個main層級指令,它指定 Nginx 服務的 Worker 進程數量。有的指令只能在一個層級中配置,如worker_processes 只能存在於 main 中,而有的指令能夠存在於多個層級,在這種狀況下,子 block 會繼承 父 block 的配置,同時若是子block配置了與父block不一樣的指令,則會覆蓋掉父 block 的配置。指令的格式是「指令名 參數1 參數2 … 參數N;」,注意參數間可用任意數量空格分隔,最後要加分號。</p>
<p>下圖是 Nginx 配置文件一般結構圖示。</p>
<p><img src="https://box.kancloud.cn/2016-...; alt=""></p>
<h3>Nginx 服務的基本配置項</h3>
<p>Nginx 服務運行時,須要加載幾個核心模塊和一個事件模塊,這些模塊運行時所支持的配置項稱爲基本配置;基本配置項大概可分爲如下四類:</p>
<ul><li>用於調試、定位的配置項;</li><li>正常運行的必備配置項;</li><li>優化性能的配置項;</li><li>事件類配置項;</li></ul>
<p>各個配置項的具體實現以下:</p>
<pre><span class="token comment">/ Nginx 服務基本配置項 /</span>php

<span class="token comment">/ 用於調試、定位的配置項 /</span>html

以守護進程 Nginx 運行方式

語法:daemon off <span class="token operator">|</span> on<span class="token punctuation">;</span>

默認:daemon on<span class="token punctuation">;</span>

master <span class="token operator">/</span> worker 工做方式

語法:master_process on <span class="token operator">|</span> off<span class="token punctuation">;</span>

默認:master_process on<span class="token punctuation">;</span>

error 日誌設置

路徑 錯誤級別

語法:error_log <span class="token operator">/</span>path<span class="token operator">/</span>file level<span class="token punctuation">;</span>

默認:error_log logs<span class="token operator">/</span>error<span class="token punctuation">.</span>log error<span class="token punctuation">;</span>

其中<span class="token operator">/</span>path<span class="token operator">/</span>file是一個具體文件;level是日誌的輸出級別,其取值以下:

debug info notice warn error crit alert emerg

從左至右級別增大;若設定一個級別後,則在輸出的日誌文件中只輸出級別大於或等於已設定的級別;

處理特殊調試點

語法:debug_points <span class="token punctuation">[</span>stop <span class="token operator">|</span> abort<span class="token punctuation">]</span>

這個設置是來跟蹤調試 Nginx 的;

僅對指定的客戶端輸出 debug 級別的日誌

語法:debug_connection <span class="token punctuation">[</span>IP <span class="token operator">|</span> DIR<span class="token punctuation">]</span>

限制 coredump 核心轉儲文件的大小

語法:worker_rlimit_core size<span class="token punctuation">;</span>

指定 coredump 文件的生成目錄

語法:working_directory path<span class="token punctuation">;</span>

<span class="token comment">/ 正常運行的配置項 /</span>前端

定義環境變量

語法:env VAR <span class="token operator">|</span> VAR<span class="token operator">=</span>VALUE<span class="token punctuation">;</span>

VAR 是變量名,VALUE 是目錄;

嵌入其餘配置文件

語法:include <span class="token operator">/</span>path<span class="token operator">/</span>file<span class="token punctuation">;</span>

include 配置項能夠將其餘配置文件嵌入到 Nginx 的 nginx<span class="token punctuation">.</span>conf 文件中;

pid 的文件路徑

語法:pid path<span class="token operator">/</span>file<span class="token punctuation">;</span>

默認:pid logs<span class="token operator">/</span>nginx<span class="token punctuation">.</span>pid<span class="token punctuation">;</span>

保存 master 進程 ID 的 pid 文件存放路徑;

Nginx worker 運行的用戶及用戶組

語法:user username <span class="token punctuation">[</span>groupname<span class="token punctuation">]</span><span class="token punctuation">;</span>

默認:user nobody nobody<span class="token punctuation">;</span>

指定 Nginx worker進程可打開最大句柄個數

語法:worker_rlimit_nofile limit<span class="token punctuation">;</span>

限制信號隊列

語法:worker_rlimit_sigpending limit<span class="token punctuation">;</span>

設置每一個用戶發給 Nginx 的信號隊列大小,超出則丟棄;

<span class="token comment">/ 優化性能配置項 /</span>node

Nginx worker 進程的個數

語法:worker_process number<span class="token punctuation">;</span>

默認:worker_process <span class="token number">1</span><span class="token punctuation">;</span>

綁定 Nginx worker 進程到指定的 CPU 內核

語法:worker_cpu_affinity cpumask <span class="token punctuation">[</span>cpumask<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">]</span>

SSL 硬件加速

語法:ssl_engine device<span class="token punctuation">;</span>

系統調用 gettimeofday 的執行頻率

語法:timer_resolution t<span class="token punctuation">;</span>

Nginx worker 進程優先級設置

語法:worker_priority nice<span class="token punctuation">;</span>

默認:worker_priority <span class="token number">0</span><span class="token punctuation">;</span>

<span class="token comment">/ 事件類配置項 /</span>nginx

通常有如下幾種配置:

<span class="token number">1</span>、是否打開accept鎖

語法格式:accept_mutex <span class="token punctuation">[</span>on <span class="token operator">|</span> off<span class="token punctuation">]</span><span class="token punctuation">;</span>

<span class="token number">2</span>、lock文件的路徑

語法格式:lock_file path<span class="token operator">/</span>file<span class="token punctuation">;</span>

<span class="token number">3</span>、使用accept鎖後到真正創建鏈接之間的延遲時間

語法格式:accept_mutex_delay Nms<span class="token punctuation">;</span>

<span class="token number">4</span>、批量創建新鏈接

語法格式:multi_accept <span class="token punctuation">[</span>on <span class="token operator">|</span> off<span class="token punctuation">]</span><span class="token punctuation">;</span>

<span class="token number">5</span>、選擇事件模型

語法格式:use <span class="token punctuation">[</span>kqueue <span class="token operator">|</span> rtisg <span class="token operator">|</span> epoll <span class="token operator">|</span> <span class="token operator">/</span>dev<span class="token operator">/</span>poll <span class="token operator">|</span> select <span class="token operator">|</span> poll <span class="token operator">|</span> eventport<span class="token punctuation">]</span><span class="token punctuation">;</span>

<span class="token number">6</span>、每一個worker進行的最大鏈接數

語法格式:worker_connections number<span class="token punctuation">;</span>

</pre>
<p>HTTP 核心模塊的配置</p>
<p>具體能夠參看《Nginx 中 HTTP 核心模塊配置》</p>
<pre><span class="token comment">/ HTTP 核心模塊配置的功能 /</span>web

<span class="token comment">/ 虛擬主機與請求分發 /</span>瀏覽器

監聽端口

語法:listen address<span class="token punctuation">:</span>port<span class="token punctuation">[</span>default <span class="token operator">|</span> default_server <span class="token operator">|</span> <span class="token punctuation">[</span>backlong<span class="token operator">=</span>num <span class="token operator">|</span> rcvbuf<span class="token operator">=</span>size <span class="token operator">|</span> sndbuf<span class="token operator">=</span>size <span class="token operator">|</span>

accept_filter <span class="token operator">|</span> deferred <span class="token operator">|</span> bind <span class="token operator">|</span> ipv6only<span class="token operator">=</span><span class="token punctuation">[</span>on <span class="token operator">|</span> off<span class="token punctuation">]</span> <span class="token operator">|</span> ssl<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">;</span>

默認:listen<span class="token punctuation">:</span><span class="token number">80</span><span class="token punctuation">;</span>

說明:

default或default_server:將所在的server塊做爲web服務的默認server塊;當請求沒法匹配配置文件中的全部主機名時,就會選擇默認的虛擬主機;

backlog<span class="token operator">=</span>num:表示 TCP 中backlog隊列存放TCP新鏈接請求的大小,默認是<span class="token operator">-</span><span class="token number">1</span>,表示不予設置;

rcvbuf<span class="token operator">=</span>size:設置監聽句柄SO_RCVBUF的參數;

sndbuf<span class="token operator">=</span>size:設置監聽句柄SO_SNDBUF的參數;

accept_filter:設置accept過濾器,只對FreeBSD操做系統有用;

deferred:設置該參數後,若用戶發起TCP鏈接請求,而且完成TCP三次握手,可是若用戶沒有發送數據,則不會喚醒worker進程,直到發送數據;

bind:綁定當前端口 <span class="token operator">/</span> 地址對,只有同時對一個端口監聽多個地址時纔會生效;

ssl:在當前端口創建的鏈接必須基於ssl協議;

配置塊範圍:server

主機名稱

語法:server_name name<span class="token punctuation">[</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">]</span><span class="token punctuation">;</span>

默認:server_name <span class="token string">""</span><span class="token punctuation">;</span>

配置塊範圍:server

server name 是使用散列表存儲的

每一個散列桶佔用內存大小

語法:server_names_hash_bucket_size size<span class="token punctuation">;</span>

默認:server_names_hash_bucker_size <span class="token number">32</span><span class="token operator">|</span><span class="token number">64</span><span class="token operator">|</span><span class="token number">128</span><span class="token punctuation">;</span>

散列表最大bucket數量

語法:server_names_hash_max_size size<span class="token punctuation">;</span>

默認:server_names_hash_max_size <span class="token number">512</span><span class="token punctuation">;</span>

默認:server_name_in_redirect on<span class="token punctuation">;</span>

配置塊範圍:server、http、location

處理重定向主機名

語法:server_name_in_redirect on <span class="token operator">|</span> off<span class="token punctuation">;</span>

默認:server_name_in_redirect on<span class="token punctuation">;</span>

配置塊範圍:server、http、location

location語法:location<span class="token punctuation">[</span><span class="token operator">=</span> <span class="token operator">|</span> <span class="token operator">~</span> <span class="token operator">|</span> <span class="token operator">~</span><span class="token operator">*</span> <span class="token operator">|</span> <span class="token operator">^</span><span class="token operator">~</span> <span class="token operator">|</span> @<span class="token punctuation">]</span> <span class="token operator">/</span>uri<span class="token operator">/</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>

配置塊範圍:server

#location嘗試根據用戶請求中的URI來匹配 <span class="token operator">/</span>uri表達式,若匹配成功,則執行<span class="token punctuation">{</span><span class="token punctuation">}</span>裏面的配置來處理用戶請求

如下是location的通常配置項

<span class="token number">1</span>、以root方式設置資源路徑

語法格式:root path<span class="token punctuation">;</span>

<span class="token number">2</span>、以alias方式設置資源路徑

語法格式:alias path<span class="token punctuation">;</span>

<span class="token number">3</span>、訪問首頁

語法格式:index file<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">;</span>

<span class="token number">4</span>、根據HTTP返回碼重定向頁面

語法格式:error_page code <span class="token punctuation">[</span>code<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">]</span> <span class="token punctuation">[</span><span class="token operator">=</span> <span class="token operator">|</span> <span class="token operator">=</span>answer<span class="token operator">-</span>code<span class="token punctuation">]</span> uri <span class="token operator">|</span> @named_location<span class="token punctuation">;</span>

<span class="token number">5</span>、是否容許遞歸使用error_page

語法格式:recursive_error_pages <span class="token punctuation">[</span>on <span class="token operator">|</span> off<span class="token punctuation">]</span><span class="token punctuation">;</span>

<span class="token number">6</span>、try_files

語法格式:try_files path1 <span class="token punctuation">[</span>path2<span class="token punctuation">]</span> uri<span class="token punctuation">;</span>

<span class="token comment">/ 文件路徑的定義 /</span>緩存

root方式設置資源路徑

語法:root path<span class="token punctuation">;</span>

默認:root html<span class="token punctuation">;</span>

配置塊範圍:server、http、location、<span class="token keyword">if</span>

以alias方式設置資源路徑

語法:alias path<span class="token punctuation">;</span>

配置塊範圍:location

訪問主頁

語法:index file<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">;</span>

默認:index index<span class="token punctuation">.</span>html<span class="token punctuation">;</span>

配置塊範圍:http、server、location

根據HTTP返回碼重定向頁面

語法:error_page code <span class="token punctuation">[</span>code<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">]</span> <span class="token punctuation">[</span><span class="token operator">=</span> <span class="token operator">|</span> <span class="token operator">=</span>answer<span class="token operator">-</span>code<span class="token punctuation">]</span> uri <span class="token operator">|</span> @named_location<span class="token punctuation">;</span>

配置塊範圍:server、http、location、<span class="token keyword">if</span>

是否容許遞歸使用error_page

語法:recursive_error_pages <span class="token punctuation">[</span>on <span class="token operator">|</span> off<span class="token punctuation">]</span><span class="token punctuation">;</span>

配置塊範圍:http、server、location

try_files

語法:try_files path1 <span class="token punctuation">[</span>path2<span class="token punctuation">]</span> uri<span class="token punctuation">;</span>

配置塊範圍:server、location

<span class="token comment">/ 內存及磁盤資源分配 /</span>服務器

HTTP 包體只存儲在磁盤文件中

語法:client_body_in_file_only on <span class="token operator">|</span> clean <span class="token operator">|</span> off<span class="token punctuation">;</span>

默認:client_body_in_file_only off<span class="token punctuation">;</span>

配置塊範圍:http、server、location

HTTP 包體儘可能寫入到一個內存buffer中

語法:client_body_single_buffer on <span class="token operator">|</span> off<span class="token punctuation">;</span>

默認:client_body_single_buffer off<span class="token punctuation">;</span>

配置塊範圍:http、server、location

存儲 HTTP 頭部的內存buffer大小

語法:client_header_buffer_size size<span class="token punctuation">;</span>

默認:client_header_buffer_size <span class="token number">1</span>k<span class="token punctuation">;</span>

配置塊範圍:http、server

存儲超大 HTTP 頭部的內存buffer大小

語法:large_client_header_buffer_size number size<span class="token punctuation">;</span>

默認:large_client_header_buffer_size <span class="token number">4</span> <span class="token number">8</span>k<span class="token punctuation">;</span>

配置塊範圍:http、server

存儲 HTTP 包體的內存buffer大小

語法:client_body_buffer_size size<span class="token punctuation">;</span>

默認:client_body_buffer_size <span class="token number">8</span>k<span class="token operator">/</span><span class="token number">16</span>k<span class="token punctuation">;</span>

配置塊範圍:http、server、location

HTTP 包體的臨時存放目錄

語法:client_body_temp_path dir<span class="token operator">-</span>path <span class="token punctuation">[</span>level1 <span class="token punctuation">[</span>level2 <span class="token punctuation">[</span>level3<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">;</span>

默認:client_body_temp_path client_body_temp<span class="token punctuation">;</span>

配置塊範圍:http、server、location

存儲 TCP 成功創建鏈接的內存池大小

語法:connection_pool_size size<span class="token punctuation">;</span>

默認:connection_pool_size <span class="token number">256</span><span class="token punctuation">;</span>

配置塊範圍:http、server

存儲 TCP 請求鏈接的內存池大小

語法:request_pool_size size<span class="token punctuation">;</span>

默認:request_pool_size <span class="token number">4</span>k<span class="token punctuation">;</span>

配置塊範圍:http、server

<span class="token comment">/ 網絡鏈接設置 /</span>markdown

讀取 HTTP 頭部的超時時間

語法:client_header_timeout time<span class="token punctuation">;</span>

默認:client_header_timeout <span class="token number">60</span><span class="token punctuation">;</span>

配置塊範圍:http、server、location

讀取 HTTP 包體的超時時間

語法:client_body_timeout time<span class="token punctuation">;</span>

默認:client_body_timeout <span class="token number">60</span><span class="token punctuation">;</span>

配置塊範圍:http、server、location

發送響應的超時時間

語法:send_timeout time<span class="token punctuation">;</span>

默認:send_timeout <span class="token number">60</span><span class="token punctuation">;</span>

配置塊範圍:http、server、location

TCP 鏈接的超時重置

語法:reset_timeout_connection on <span class="token operator">|</span> off<span class="token punctuation">;</span>

默認:reset_timeout_connection off<span class="token punctuation">;</span>

配置塊範圍:http、server、location

控制關閉 TCP 鏈接的方式

語法:lingering_close off <span class="token operator">|</span> on <span class="token operator">|</span> always<span class="token punctuation">;</span>

默認:lingering_close on<span class="token punctuation">;</span>

配置塊範圍:http、server、location

always 表示關閉鏈接以前無條件處理鏈接上全部用戶數據;

off 表示不處理;on 通常會處理;

lingering_time

語法:lingering_time time<span class="token punctuation">;</span>

默認:lingering_time <span class="token number">30</span>s<span class="token punctuation">;</span>

配置塊範圍:http、server、location

lingering_timeout

語法:lingering_timeout time<span class="token punctuation">;</span>

默認:lingering_time <span class="token number">5</span>s<span class="token punctuation">;</span>

配置塊範圍:http、server、location

對某些瀏覽器禁止keepalive功能

語法:keepalive_disable <span class="token punctuation">[</span>mise6 <span class="token operator">|</span> safari <span class="token operator">|</span> none<span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>

默認:keepalive_disable mise6 safari<span class="token punctuation">;</span>

配置塊範圍:http、server、location

keepalive超時時間

語法:keepalive_timeout time<span class="token punctuation">;</span>

默認:keepalive_timeout <span class="token number">75</span><span class="token punctuation">;</span>

配置塊範圍:http、server、location

keepalive長鏈接上容許最大請求數

語法:keepalive_requests n<span class="token punctuation">;</span>

默認:keepalive_requests <span class="token number">100</span><span class="token punctuation">;</span>

配置塊範圍:http、server、location

tcp_nodelay

語法:tcp_nodelay on <span class="token operator">|</span> off<span class="token punctuation">;</span>

默認:tcp_nodelay on<span class="token punctuation">;</span>

配置塊範圍:http、server、location

tcp_nopush

語法:tcp_nopush on <span class="token operator">|</span> off<span class="token punctuation">;</span>

默認:tcp_nopush off<span class="token punctuation">;</span>

配置塊範圍:http、server、location

<span class="token comment">/ MIME 類型設置 /</span>

MIME type 與文件擴展的映射

語法:type<span class="token punctuation">{</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">}</span>

配置塊範圍:http、server、location

多個擴展名可映射到同一個 MIME type

默認 MIME type

語法:default_type MIME<span class="token operator">-</span>type<span class="token punctuation">;</span>

默認:default_type text<span class="token operator">/</span>plain<span class="token punctuation">;</span>

配置塊範圍:http、server、location

type_hash_bucket_size

語法:type_hash_bucket_size size<span class="token punctuation">;</span>

默認:type_hash_bucket_size <span class="token number">32</span> <span class="token operator">|</span> <span class="token number">64</span> <span class="token operator">|</span> <span class="token number">128</span><span class="token punctuation">;</span>

配置塊範圍:http、server、location

type_hash_max_size

語法:type_hash_max_size size<span class="token punctuation">;</span>

默認:type_hash_max_size <span class="token number">1024</span><span class="token punctuation">;</span>

配置塊範圍:http、server、location

<span class="token comment">/ 限制客戶端請求 /</span>

按 HTTP 方法名限制用戶請求

語法:limit_except method<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">{</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">}</span>

配置塊:location

method 的取值以下:

GET、HEAD、POST、PUT、DELETE、MKCOL、COPY、MOVE、OPTIONS、

PROPFIND、PROPPATCH、LOCK、UNLOCK、PATCH

HTTP 請求包體的最大值

語法:client_max_body_size size<span class="token punctuation">;</span>

默認:client_max_body_size <span class="token number">1</span>m<span class="token punctuation">;</span>

配置塊範圍:http、server、location

對請求限制速度

語法:limit_rate speed<span class="token punctuation">;</span>

默認:limit_rate <span class="token number">0</span><span class="token punctuation">;</span>

配置塊範圍:http、server、location、<span class="token keyword">if</span>

<span class="token number">0</span> 表示不限速

limit_rate_after規定時間後限速

語法:limit_rate_after time<span class="token punctuation">;</span>

默認:limit_rate_after <span class="token number">1</span>m<span class="token punctuation">;</span>

配置塊範圍:http、server、location、<span class="token keyword">if</span>

<span class="token comment">/ 文件操做的優化 /</span>

sendfile系統調用

語法:sendfile on <span class="token operator">|</span> off<span class="token punctuation">;</span>

默認:sendfile off<span class="token punctuation">;</span>

配置塊:http、server、location

AIO 系統調用

語法:aio on <span class="token operator">|</span> off<span class="token punctuation">;</span>

默認:aio off<span class="token punctuation">;</span>

配置塊:http、server、location

directio

語法:directio size <span class="token operator">|</span> off<span class="token punctuation">;</span>

默認:directio off<span class="token punctuation">;</span>

配置塊:http、server、location

directio_alignment

語法:directio_alignment size<span class="token punctuation">;</span>

默認:directio_alignment <span class="token number">512</span><span class="token punctuation">;</span>

配置塊:http、server、location

打開文件緩存

語法:open_file_cache max<span class="token operator">=</span>N <span class="token punctuation">[</span>inactive<span class="token operator">=</span>time<span class="token punctuation">]</span> <span class="token operator">|</span> off<span class="token punctuation">;</span>

默認:open_file_cache off<span class="token punctuation">;</span>

配置塊:http、server、location

是否緩存打開文件的錯誤信息

語法:open_file_cache_errors on <span class="token operator">|</span> off<span class="token punctuation">;</span>

默認:open_file_cache_errors off<span class="token punctuation">;</span>

配置塊:http、server、location

不被淘汰的最小訪問次數

語法:open_file_cache_min_user number<span class="token punctuation">;</span>

默認:open_file_cache_min_user <span class="token number">1</span><span class="token punctuation">;</span>

配置塊:http、server、location

檢驗緩存中元素有效性的頻率

語法:open_file_cache_valid time<span class="token punctuation">;</span>

默認:open_file_cache_valid <span class="token number">60</span>s<span class="token punctuation">;</span>

配置塊:http、server、location

<span class="token comment">/ 客戶請求的特殊處理 /</span>

忽略不合法的 HTTP 頭部

語法:ignore_invalid_headers on <span class="token operator">|</span> off<span class="token punctuation">;</span>

默認:ignore_invalid_headers on<span class="token punctuation">;</span>

配置塊:http、server

HTTP 頭部是否容許下劃線

語法:underscores_in_headers on <span class="token operator">|</span> off<span class="token punctuation">;</span>

默認:underscores_in_headers off<span class="token punctuation">;</span>

配置塊:http、server

If_Modified_Since 頭部的處理策略

語法:if_modified_since <span class="token punctuation">[</span>off <span class="token operator">|</span> exact <span class="token operator">|</span> before<span class="token punctuation">]</span>

默認:if_modified_since exact<span class="token punctuation">;</span>

配置塊:http、server、location

文件未找到時是否記錄到error日誌

語法:log_not_found on <span class="token operator">|</span> off<span class="token punctuation">;</span>

默認:log_not_found on<span class="token punctuation">;</span>

配置塊:http、server、location

是否合併相鄰的「<span class="token operator">/</span>」

語法:merge_slashes on <span class="token operator">|</span> off<span class="token punctuation">;</span>

默認:merge_slashes on<span class="token punctuation">;</span>

配置塊:http、server、location

DNS解析地址

語法:resolver address<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">;</span>

配置塊:http、server、location

DNS解析的超時時間

語法:resolver_timeout time<span class="token punctuation">;</span>

默認:resolver_timeout <span class="token number">30</span>s<span class="token punctuation">;</span>

配置塊:http、server、location

返回錯誤頁面是否在server中註明Nginx版本

語法:server_tokens on <span class="token operator">|</span> off<span class="token punctuation">;</span>

默認:server_tokens on<span class="token punctuation">;</span>

配置塊:http、server、location

</pre>
<p>如下是在 Ubuntu 12.04 系統成功安裝 Nginx 以後的主配置文件:</p>
<pre>#Nginx服務器正常啓動時會讀取該配置文件,如下的值都是默認的,若須要可自行修改;

如下是配置選項

Nginx worker進程運行的用戶以及用戶組

語法格式:user username<span class="token punctuation">[</span>groupname<span class="token punctuation">]</span>

user nobody<span class="token punctuation">;</span>

Nginx worker 進程個數

worker_processes <span class="token number">1</span><span class="token punctuation">;</span>

error 日誌設置

語法格式:error <span class="token operator">/</span>path<span class="token operator">/</span>file level

其中<span class="token operator">/</span>path<span class="token operator">/</span>file是一個具體文件;level是日誌的輸出級別,其取值以下:

debug info notice warn error crit alert emerg<span class="token punctuation">,</span>從左至右級別增大;

若設定一個級別後,則在輸出的日誌文件中只輸出級別大於或等於已設定的級別;

error_log logs<span class="token operator">/</span>error<span class="token punctuation">.</span>log<span class="token punctuation">;</span>

error_log logs<span class="token operator">/</span>error<span class="token punctuation">.</span>log notice<span class="token punctuation">;</span>

error_log logs<span class="token operator">/</span>error<span class="token punctuation">.</span>log info<span class="token punctuation">;</span>

保存master進程ID的pid文件存放路徑

語法格式:pid path<span class="token operator">/</span>file

pid logs<span class="token operator">/</span>nginx<span class="token punctuation">.</span>pid<span class="token punctuation">;</span>

事件類配置項

通常有如下幾種配置:

<span class="token number">1</span>、是否打開accept鎖

語法格式:accept_mutex <span class="token punctuation">[</span>on <span class="token operator">|</span> off<span class="token punctuation">]</span><span class="token punctuation">;</span>

<span class="token number">2</span>、lock文件的路徑

語法格式:lock_file path<span class="token operator">/</span>file<span class="token punctuation">;</span>

<span class="token number">3</span>、使用accept鎖後到真正創建鏈接之間的延遲時間

語法格式:accept_mutex_delay Nms<span class="token punctuation">;</span>

<span class="token number">4</span>、批量創建新鏈接

語法格式:multi_accept <span class="token punctuation">[</span>on <span class="token operator">|</span> off<span class="token punctuation">]</span><span class="token punctuation">;</span>

<span class="token number">5</span>、選擇事件模型

語法格式:use <span class="token punctuation">[</span>kqueue <span class="token operator">|</span> rtisg <span class="token operator">|</span> epoll <span class="token operator">|</span> <span class="token operator">/</span>dev<span class="token operator">/</span>poll <span class="token operator">|</span> select <span class="token operator">|</span> poll <span class="token operator">|</span> eventport<span class="token punctuation">]</span><span class="token punctuation">;</span>

<span class="token number">6</span>、每一個worker進行的最大鏈接數

語法格式:worker_connections number<span class="token punctuation">;</span>

events <span class="token punctuation">{</span>

worker_connections  <span class="token number">1024</span><span class="token punctuation">;</span>

<span class="token punctuation">}</span>

如下是http模塊

http <span class="token punctuation">{</span>

include       mime<span class="token punctuation">.</span>types<span class="token punctuation">;</span>
default_type  application<span class="token operator">/</span>octet<span class="token operator">-</span>stream<span class="token punctuation">;</span>

#log_format  main  <span class="token string">'$remote_addr - $remote_user [$time_local] "$request" '</span>
#                  <span class="token string">'$status $body_bytes_sent "$http_referer" '</span>
#                  <span class="token string">'"$http_user_agent" "$http_x_forwarded_for"'</span><span class="token punctuation">;</span>

#access_log  logs<span class="token operator">/</span>access<span class="token punctuation">.</span>log  main<span class="token punctuation">;</span>

sendfile        on<span class="token punctuation">;</span>
#tcp_nopush     on<span class="token punctuation">;</span>

#keepalive_timeout  <span class="token number">0</span><span class="token punctuation">;</span>
keepalive_timeout  <span class="token number">65</span><span class="token punctuation">;</span>

#gzip  on<span class="token punctuation">;</span>

server塊

每一個server塊就是一個虛擬主機,按照server_name來區分

server <span class="token punctuation">{</span>

監聽端口

listen       <span class="token number">80</span><span class="token punctuation">;</span>

主機名稱

server_name  localhost<span class="token punctuation">;</span>

    #charset koi8<span class="token operator">-</span>r<span class="token punctuation">;</span>

    #access_log  logs<span class="token operator">/</span>host<span class="token punctuation">.</span>access<span class="token punctuation">.</span>log  main<span class="token punctuation">;</span>

location語法:location<span class="token punctuation">[</span><span class="token operator">=</span> <span class="token operator">|</span> <span class="token operator">~</span> <span class="token operator">|</span> <span class="token operator">~</span><span class="token operator">*</span> <span class="token operator">|</span> <span class="token operator">^</span><span class="token operator">~</span> <span class="token operator">|</span> @<span class="token punctuation">]</span> <span class="token operator">/</span>uri<span class="token operator">/</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>

#location嘗試根據用戶請求中的URI來匹配 <span class="token operator">/</span>uri表達式,若匹配成功,則執行<span class="token punctuation">{</span><span class="token punctuation">}</span>裏面的配置來處理用戶請求

如下是location的通常配置項

<span class="token number">1</span>、以root方式設置資源路徑

語法格式:root path<span class="token punctuation">;</span>

<span class="token number">2</span>、以alias方式設置資源路徑

語法格式:alias path<span class="token punctuation">;</span>

<span class="token number">3</span>、訪問首頁

語法格式:index file<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">;</span>

<span class="token number">4</span>、根據HTTP返回碼重定向頁面

語法格式:error_page code <span class="token punctuation">[</span>code<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">]</span> <span class="token punctuation">[</span><span class="token operator">=</span> <span class="token operator">|</span> <span class="token operator">=</span>answer<span class="token operator">-</span>code<span class="token punctuation">]</span> uri <span class="token operator">|</span> @named_location<span class="token punctuation">;</span>

<span class="token number">5</span>、是否容許遞歸使用error_page

語法格式:recursive_error_pages <span class="token punctuation">[</span>on <span class="token operator">|</span> off<span class="token punctuation">]</span><span class="token punctuation">;</span>

<span class="token number">6</span>、try_files

語法格式:try_files path1 <span class="token punctuation">[</span>path2<span class="token punctuation">]</span> uri<span class="token punctuation">;</span>

location <span class="token operator">/</span> <span class="token punctuation">{</span>
        root   html<span class="token punctuation">;</span>
        index  index<span class="token punctuation">.</span>html index<span class="token punctuation">.</span>htm<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    #error_page  <span class="token number">404</span>              <span class="token operator">/</span><span class="token number">404.</span>html<span class="token punctuation">;</span>

    # redirect server error pages to the static page <span class="token operator">/</span><span class="token number">50</span>x<span class="token punctuation">.</span>html
    #
    error_page   <span class="token number">500</span> <span class="token number">502</span> <span class="token number">503</span> <span class="token number">504</span>  <span class="token operator">/</span><span class="token number">50</span>x<span class="token punctuation">.</span>html<span class="token punctuation">;</span>
    location <span class="token operator">=</span> <span class="token operator">/</span><span class="token number">50</span>x<span class="token punctuation">.</span>html <span class="token punctuation">{</span>
        root   html<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    # proxy the PHP scripts to Apache listening on <span class="token number">127.0</span><span class="token number">.0</span><span class="token number">.1</span><span class="token punctuation">:</span><span class="token number">80</span>
    #
    #location <span class="token operator">~</span> \<span class="token punctuation">.</span>php$ <span class="token punctuation">{</span>
    #    proxy_pass   http<span class="token punctuation">:</span><span class="token operator">/</span><span class="token operator">/</span><span class="token number">127.0</span><span class="token number">.0</span><span class="token number">.1</span><span class="token punctuation">;</span>
    #<span class="token punctuation">}</span>

    # pass the PHP scripts to FastCGI server listening on <span class="token number">127.0</span><span class="token number">.0</span><span class="token number">.1</span><span class="token punctuation">:</span><span class="token number">9000</span>
    #
    #location <span class="token operator">~</span> \<span class="token punctuation">.</span>php$ <span class="token punctuation">{</span>
    #    root           html<span class="token punctuation">;</span>
    #    fastcgi_pass   <span class="token number">127.0</span><span class="token number">.0</span><span class="token number">.1</span><span class="token punctuation">:</span><span class="token number">9000</span><span class="token punctuation">;</span>
    #    fastcgi_index  index<span class="token punctuation">.</span>php<span class="token punctuation">;</span>
    #    fastcgi_param  SCRIPT_FILENAME  <span class="token operator">/</span>scripts$fastcgi_script_name<span class="token punctuation">;</span>
    #    include        fastcgi_params<span class="token punctuation">;</span>
    #<span class="token punctuation">}</span>

    # deny access to <span class="token punctuation">.</span>htaccess files<span class="token punctuation">,</span> <span class="token keyword">if</span> Apache's document root
    # concurs with nginx's one
    #
    #location <span class="token operator">~</span> <span class="token operator">/</span>\<span class="token punctuation">.</span>ht <span class="token punctuation">{</span>
    #    deny  all<span class="token punctuation">;</span>
    #<span class="token punctuation">}</span>
<span class="token punctuation">}</span>

# another virtual host using mix of IP<span class="token operator">-</span><span class="token punctuation">,</span> name<span class="token operator">-</span><span class="token punctuation">,</span> and port<span class="token operator">-</span>based configuration
#
#server <span class="token punctuation">{</span>
#    listen       <span class="token number">8000</span><span class="token punctuation">;</span>
#    listen       somename<span class="token punctuation">:</span><span class="token number">8080</span><span class="token punctuation">;</span>
#    server_name  somename  alias  another<span class="token punctuation">.</span>alias<span class="token punctuation">;</span>

#    location <span class="token operator">/</span> <span class="token punctuation">{</span>
#        root   html<span class="token punctuation">;</span>
#        index  index<span class="token punctuation">.</span>html index<span class="token punctuation">.</span>htm<span class="token punctuation">;</span>
#    <span class="token punctuation">}</span>
#<span class="token punctuation">}</span>

# HTTPS server
#
#server <span class="token punctuation">{</span>
#    listen       <span class="token number">443</span> ssl<span class="token punctuation">;</span>
#    server_name  localhost<span class="token punctuation">;</span>

#    ssl_certificate      cert<span class="token punctuation">.</span>pem<span class="token punctuation">;</span>
#    ssl_certificate_key  cert<span class="token punctuation">.</span>key<span class="token punctuation">;</span>

#    ssl_session_cache    shared<span class="token punctuation">:</span>SSL<span class="token punctuation">:</span><span class="token number">1</span>m<span class="token punctuation">;</span>
#    ssl_session_timeout  <span class="token number">5</span>m<span class="token punctuation">;</span>

#    ssl_ciphers  HIGH<span class="token punctuation">:</span><span class="token operator">!</span>aNULL<span class="token punctuation">:</span><span class="token operator">!</span>MD5<span class="token punctuation">;</span>
#    ssl_prefer_server_ciphers  on<span class="token punctuation">;</span>

#    location <span class="token operator">/</span> <span class="token punctuation">{</span>
#        root   html<span class="token punctuation">;</span>
#        index  index<span class="token punctuation">.</span>html index<span class="token punctuation">.</span>htm<span class="token punctuation">;</span>
#    <span class="token punctuation">}</span>
#<span class="token punctuation">}</span>

<span class="token punctuation">}</span>

</pre>
<p>參考資料:</p>
<p>《深刻理解Nginx》</p>
<p>《Nginx模塊開發入門》</p>
<p>《Nginx開發從入門到精通》</p>
<p>https://www.kancloud.cn/diges...;/p>
<p>點擊得好禮</p>
</div>

本文由做者pm1024:JAVA實驗手冊 發佈,交流:583284584!
相關文章
相關標籤/搜索