nginx.conf配置項

環境:centos7  nginx1.16.1

如下配置均在配置文件中進行:/etc/nginx/nginx.confhtml

1.設置工做進程的全部者和所屬組node

  user  全部者  所屬組;  nginx

  設置後要在操做系統中設置該用戶和用戶組web

  /usr/sbin/groupadd  www    /usr/sbin/useradd -g www wwwcentos

2. 網絡鏈接事件模型設置 瀏覽器

  event{服務器

                 accept_mutex on;    #設置網路鏈接序列化,防止驚羣現象發生,默認爲oncookie

                 multi_accept on;    #設置一個進程是否同時接受多個網絡鏈接,默認爲off網絡

                 worker_connections  1024;    #每一個工做進程的最大鏈接數,默認爲512併發

       use epoll;     #參考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ];

  }

3. 服務器返回文件的MIME類型設置

  include  mime.types;  #引入的mime.types文件用來幫助http協議判斷網頁文件的MIME類型,該項做用域 http  server

    mime.types文件:文件擴展名與文件類型映射表  服務器根據mime.types文件,由網頁文件擴展名獲得其MIME類型,並加在響應頭中發送給瀏覽器

  default_type  application/octet-stream  #當文件類型未定義時,默認返回的MIME類型。做用域爲 location  http

    注意:圖片,音頻,視頻等文件要在html文件才能被瀏覽器展現和播放,但若是不設置default_type  application/octet-stream 這一項,服務器直接返回MIME類型爲

    image/jpeg ,audio/mp4...的響應頭,瀏覽器不會有任何動做,設置此類文件爲二進制流後,瀏覽器接受到該響應頭,會產生一個下載窗口,從而在客戶端獲取服務器文件

    設置MIME類型爲application/octet-stream(二進制流文件,瀏覽器打開會出現下載)

4. 客戶端相關配置

  client_max_body_size 10m; #客戶端請求服務器時發送的請求主體最大容量。該配置項做用域http,server,location 。值爲0,則不受限制

  client_header_buffer_size 32k; #用於指定來自客戶端請求頭緩衝區大小,對於大多數請求,1KB的緩衝區大小已經足夠,若是自定義了消息頭或有更大的cookie,能夠增長緩衝區大小。

  large_client_header_buffers 4 64k; #設置客戶端請求頭的緩衝區的最大數目和大小。請求行不能超過一個緩衝區的大小,請求頭字段也不能超過一個緩衝區的大小。緩衝區僅按需分配。

  默認狀況下,緩衝區大小等於8K字節。若是在請求處理結束後,鏈接轉換爲keep alive狀態,則釋放這些緩衝區。

  client_body_temp_path  filename [level1] [level2 ] [lever3 ];  #設定服務器用於存儲客戶端請求報body部分的臨時存儲路徑及子目錄結構和數量

    level1:一級目錄個數,1表示目錄數不超過1位16進制數,故最大值爲16

    level2:二級目錄個數,2表示目錄數不超過2位16進制數,故最大值爲16*16=256

    level3:三級目錄個數

  client_body_buffer_size  32k;  #設定服務器用於接收每一個客戶端請求報文的body部分的緩衝區大小;默認爲16k;

5. 文件傳輸方式設置

  sendfile  on;  #以sendfile方式傳輸文件,默認開啓。做用域:http  location  server

    指定是否使用sendfile系統調用來傳輸文件。sendfile系統調用在兩個文件描述符之間直接傳遞數據(徹底在內核中操做),

    從而避免了數據在內核緩衝區和用戶緩衝區之間的拷貝,操做效率很高,被稱之爲零拷貝。

    傳統文件傳輸方式:read,write/send 步驟以下: 
    1. 調用read函數,文件數據拷貝到內核緩衝區
    2. read函數返回,數據從內核緩衝區拷貝到用戶緩衝區
    3. 調用write/send函數,將數據從用戶緩衝區拷貝到內核socket緩衝區
    4. 數據從內核socket緩衝區拷貝到協議引擎中

      在這個過程中,文件數據其實是通過了四次拷貝操做:
      硬盤—>內核緩衝區—>用戶緩衝區—>內核socket緩衝區—>協議引擎

    sendfile傳輸方式:

      1. sendfile系統調用利用DMA引擎將文件數據拷貝到內核緩衝區,以後數據被拷貝到內核socket緩衝區中

      2. DMA引擎將數據從內核socket緩衝區拷貝到協議引擎中

      硬盤—>內核緩衝區—>內核socket緩衝區—>協議引擎
   sendfile_max_chunk 100k;  #每一個進程調用sendfile傳輸數據的最大值

6. 設置超時
  a.  nginx與客戶端的超時設置
  (1)客戶端請求頭超時時間
     client_header_timeout  60s; #一次TCP鏈接中,nginx服務器接收到客戶端一個完整請求頭的最長時間,超過則斷開tcp鏈接,並返回408
  (2)客戶端請求體超時時間
     client_body_timeout  60s;  #一次TCP鏈接中,nginx服務器接收到客戶端一個完整請求體的最長時間,超過則斷開tcp鏈接,並返回408
  (3)send_timeout  60s;     #一次TCP鏈接中,2次向客戶端發送響應報文的間隔最大時間,超過這個時間則斷開TCP鏈接
  b.  nginx與代理服務器的超時設置
    proxy_connect_timeout 65s;  #默認60s,不能超過75秒,發起握手到等候響應的時間(創建請求的時間)
    proxy_read_timeout  60s;  #創建tcp鏈接後,等候服務器響應的時間(處理請求的時間),大於這個時間則斷開鏈接
    proxy_send_timeout 60s;  #upstream服務器從開始響應到響應結束的時間,大於這個時間則斷開鏈接
    server  主機地址  [fail_timeout=30]  [max_fails=1]; #可選項不寫則默認 10s  1, 做用域upstream
   在fail_timeout時間內,某個server鏈接失敗了max_fails次,則認爲這個主機不工做了,並在接下來的 fail_timeout時間內,nginx再也不將請求分發給失效的server
  c.其它超時設置
  (1)設置延遲關閉鏈接時間
     lingering_timeout  5s;  #默認值5s,做用域 http serverr location。 在關閉鏈接前,會檢測是否有用戶發送的數據到達服務器,
    若是超過lingering_timeout時間後尚未數據可讀,就直接關閉鏈接;不然,必須在讀取完鏈接緩衝區上的數據並丟棄掉後纔會關閉鏈接。
  (2)設置DNS解析超時時間
     resolver_timeout  5s;    #默認值30s
  (3)設置長鏈接的時間
     keepalive_timeout 65s;    #一個http請求完成以後,保持TCP鏈接的時長,默認75s
  (4) 504 Gateway Time-out     
      通常看來, 這種狀況多是因爲nginx默認的fastcgi進程響應的緩衝區過小形成的, 這將致使fastcgi進程被掛起, 若是你的fastcgi服務對這個掛起處理的很差,
    那麼最後就極有可能致使504 Gateway Time-out。如今的網站, 尤爲某些論壇有大量的回覆和不少內容的, 一個頁面甚至有幾百K默認的fastcgi進程響應的緩衝區是8K,
    咱們能夠設置大點在nginx.conf裏, 加入:fastcgi_buffers 8 128k 這表示設置fastcgi緩衝區爲8×128k,固然若是您在進行某一項即時的操做, 可能須要nginx的超時參數調大點,
    例如設置成60秒: send_timeout 60;
   (  
7. 長鏈接配置
  (1)一次長鏈接的請求數
   keepalive_requests 60;  #一次tcp鏈接中,服務器接收請求的最大次數,超過則關閉鏈接
  (2)瀏覽器長鏈接設置
   keepalive_disable none | 瀏覽器名; #對哪一種瀏覽器禁用長鏈接,none表示全部瀏覽器都開啓
    Mozilla--火狐  Opera--歐鵬 MSIE--IE瀏覽器
8. 錯誤頁配置
   error_page 404 [200]  https://www.baidu.com;  #發生404錯誤時顯示的頁面。做用域server  location http 
  可選參數爲發生錯誤時,返回給客戶端的狀態碼,防止返回404後頁面被劫持
  
9. 引入配置文件
   include 文件名;  #引入額外配置文件到主配置文件。做用域 http
  
10. TCP相關設置
   tcp_nodelay  on | off;  #請求是否延遲發送。做用域http server  location
  當爲off時,延遲發送,合併多個請求後再發送,湊齊多個請求後在發送給後臺處理,可是這個狀況可能會致使客戶端等待,會比較慢,因此通常是不延遲發送,默認on時,不延遲發送
   tcp_nopush on;     #防止網絡阻塞
 
11. 監聽端口設置
  listen address[:port] [default_server] [setfib=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [ssl] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];    #監聽的主機及端口,不寫端口默認80,網絡數據都是經過該監聽的端口傳輸

   address   監聽的主機,即web服務主機

   default_server  該虛擬主機設定爲默認虛擬主機

   ssl    限制僅可以經過ssl鏈接提供服務,即只能以https訪問

   backlog=number   超過併發鏈接數後,新請求進入後援隊列的長度

   rcvbuf=size      接收緩衝區大小

   sndbuf=size           發送緩衝區大小

 
12. 響應報文的設置
   server_tokens  on | off | build | string;  #是否在響應報文的首部顯示nginx版本,默認是on,建議設置爲off,隱藏版本號
 
13. 
相關文章
相關標籤/搜索