Nginx——模塊(1)

nginx的模塊

nginx高度模塊化,但其模塊早期不支持DSO機制;1.9.11版本支持動態裝載和卸載html

核心模塊:core modulenode

標準模塊:nginx

  • HTTP 模塊:ngx_http_*
  • Mail 模塊 ngx_mail_*
  • Stream 模塊 ngx_stream_*

第三方模塊:web

ngx_http_core_module 核心模塊

1)server { ... }:配置虛擬主機正則表達式

 # vim /etc/nginx/nginx.conf
 http  { 
    server {
        listen 80;
        server_name www.miaosen.tech;
        root /data/www/;
    }
    server {
        listen 80;
        server_name news.miaosen.tech;
        root /data/news/;
    }
}
# nginx  啓動服務
# echo news site > /data/news/index.html
# echo www site > /data/www/index.html

  

客戶端測試:算法

# curl www.miaosen.tech
www site
# curl news.miaosen.tech
news site

  

2)listen port|address[:port]|unix:/PATH/TO/SOCKET_FILEvim

listen address[:port] [default_server] [ssl] [http2 | spdy]  [backlog=number] [rcvbuf=size] [sndbuf=size]

  

  • default_server:設定爲默認虛擬主機
  • ssl:限制僅可以經過ssl鏈接提供服務
  • backlog=number:超過併發鏈接數後,新請求進入後援隊列的長
  • rcvbuf=size:接收緩衝區大小
  • sndbuf=size:發送緩衝區大小

listen PORT; 指令監聽在不一樣的端口,可實現基於端口的虛擬主機瀏覽器

listen IP:PORT; 監聽 IP 地址不一樣,實現基於IP的虛擬主機緩存

3)server_name name ...bash

虛擬主機的主機名稱後可跟多個由空白字符分隔的字符串

支持*通配任意長度的任意字符

    server {
        listen 80;
        server_name *.miaosen.tech;
        root /data/default/;
    }
# echo default > /data/default/index.html
# nginx -s reload
# curl xxx.miaosen.tech
default

  

支持 ~ 起始的字符作正則表達式模式匹配,性能緣由慎用

server_name     ~^www\d+\.miaosen\.tech$  #說明:\d 表示 [0-9]

  

匹配優先級機制從高到低:

(1) 首先是字符串精確匹配 如:www.miaosen.com

(2) 左側*通配符 如:*.miaosen.tech

(3) 右側*通配符 如:www.miaosen.*

(4) 正則表達式 如: ~^.*\.miaosen\.tech$

(5) default_server

4)tcp_nodelay on|off

在keepalived模式下的鏈接是否啓用TCP_NODELAY選項

當爲off時,延遲發送,合併多個請求後再發送

默認on時,不延遲發送

可用於:http, server, location

若是爲了節約服務器性能能夠打開,若是爲了用戶體驗更好選擇關閉

5)sendfile on|off

是否啓用sendfile功能,在內核中封裝報文直接發送,默認關閉

6)server_tokens on|off|build|string

是否在響應報文的Server首部顯示nginx版本,建議關閉

7)root

設置web資源的路徑映射;用於指明請求的URL所對應的文檔的目錄路徑,可用於http, server, location, if in location

8)location [ = | ~ | ~* | ^~ ] uri { ... }

在一個server中location配置段可存在多個,用於實現從uri到文件系統的路徑映射;ngnix會根據用戶請求的URI來檢查定義的全部location,並找出一個最佳匹配,然後應用其配置

# mkdir /data/www/blog/
# echo blog > /data/www/blog/index.html
# vim /etc/nginx/nginx.conf
    server {
        listen 80;
        server_name www.miaosen.tech;
        root /data/www/;
        location /blog {
            root /data/www/;
        }
    }
# curl http://www.miaosen.tech/blog/  #測試
blog

  

=:對URI作精確匹配

^~: 對URI的最左邊部分作匹配檢查,不區分字符大小寫

~: 對URI作正則表達式模式匹配,區分字符大小寫

~*: 對URI作正則表達式模式匹配,不區分字符大小寫

不帶符號:匹配起始於此uri的全部的uri

匹配優先級從高到低:=, ^~, ~/~*, 不帶符號

例如:

location = / {
    [ configuration A ]
}
location / {
    [ configuration B ]
}
location /documents/ {
    [ configuration C ]
}
location ^~ /images/ {
    [ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
    [ configuration E ]
}

  

The 「/」 request will match configuration A, 
the 「/index.html」 request will match configuration B, 
the 「/documents/document.html」 request will match configuration C, 
the 「/images/1.gif」 request will match configuration D, 
and the 「/documents/1.jpg」 request will match configuration E.

  

9)alias

路徑別名,文檔映射的另外一種機制;僅能用於location上下文

    server {
        listen 80;
        server_name www.miaosen.tech;
        root /data/www/;
        location /blog;
            alias /data/www/blog;  #和root /data/www/;做用相同
        }
    }
# curl http://www.miaosen.tech/blog/
blog

  

注意:location中使用root指令和alias指令的意義不一樣

(a) root,給定的路徑對應於location中的/uri/左側的/

(b) alias,給定的路徑對應於location中的/uri/右側的/

10)index file ...

指定默認網頁文件,注意須要裝載 ngx_http_index_module 模塊

11)error_page code ... [=[response]] uri

定義錯誤頁,以指定的響應狀態碼進行響應;可用位置:http, server, location, if in location

# echo "404 not found page" > /data/www/404.html
    server {
        listen 80;
        server_name www.miaosen.tech;
        root /data/www/;
        error_page 404 /404.html;
    }
# curl http://www.miaosen.tech/notfound.html
404 not found page
    server {
        listen 80;
        server_name www.miaosen.tech;
        root /data/www/;
        error_page 404 =200 /404.html;  #將404返回碼重定向成200訪問碼,防止瀏覽器劫持
    }
# curl -I http://www.miaosen.tech/notfound.html
HTTP/1.1 200 OK  #測試爲200正確訪問碼

  

12)try_files file ... uri | =code

​ 按順序檢查文件是否存在,返回第一個找到的文件或文件夾(結尾加斜線表示爲文件夾),若是全部的文件或文件夾都找不到,會進行一個內部重定向到最後一個參數。只有最後一個參數能夠引發一個內部重定向,以前的參數只設置內部URI的指向。最後一個參數是回退URI且必須存在,不然會出現內部500錯誤

# echo default page > /data/news/default.html
    server {
        listen 80;
        server_name news.miaosen.tech;
        root /data/news/;
        location / {
            try_files $uri /default.html;  #若是用戶訪問的URI不存在則放回默認頁面
        }
    }
# curl http://news.miaosen.tech/index.html   
news site
# curl http://news.miaosen.tech/noindex.html
default page
    server {
        listen 80;
        server_name news.miaosen.tech;
        root /data/news/;
        location / {
            try_files $uri $uri/index.html $uri.html =404;
        }
    }
# curl http://news.miaosen.tech/index.html  
news site
# curl http://news.miaosen.tech/noindex.html
404 Not Found

  

13)keepalive_timeout timeout [header_timeout]

設定保持鏈接超時時長,0表示禁止長鏈接,默認爲75s,可用於http, server, location

14)keepalive_requests number

在一次長鏈接上所容許請求的資源的最大數量,默認爲100

15)keepalive_disable none | browser ...

對哪類型的瀏覽器禁用長鏈接

16)send_timeout time

向客戶端發送響應報文的超時時長,此處是指兩次寫操做之間的間隔時長,而非整個響應過程的傳輸時長

17)client_body_buffer_size size

用於接收每一個客戶端請求報文的body部分的緩衝區大小;默認爲16k;

超出此大小時,其將被暫存到磁盤上的由下面 client_body_temp_path 指令所定義的位置

18)client_body_temp_path path [level1 [level2 [level3]]]

設定存儲客戶端請求報文的body部分的臨時存儲路徑及子目錄結構和數量

19)limit_rate rate

限制響應給客戶端的傳輸速率,單位是bytes/second;默認值0表示無限制

20)limit_except method ... { ... }

限制客戶端使用除了指定的請求方法以外的其它方法,僅用於location

method:GET(包括HEAD), HEAD, POST, PUT, DELETE, MKCOL, COPY, MOVE, OPTIONS, PROPFIND, PROPPATCH, LOCK, UNLOCK, PATCH

location /upload {
    root /date/www/;
    limit_except GAT {
        allow 192.168.0.9/24;
        deny all;
    }
}
# 除了 GET和HEAD 以外其它方法僅容許192.168.0.9/24主機使用

  

21)aio on | off | threads[=pool]

是否啓用aio功能

22)directio size | off

當文件大於等於給定大小時,例如directio 4m,同步到磁盤,而非寫緩存,以防數據丟失

23)open_file_cache off | max=N [inactive=time]

  • max=N:可緩存的緩存項上限;達到上限後會使用LRU算法實現管理
  • inactive=time:緩存項的非活動時長,在此處指定的時長內未被命中的或命中的次數少於open_file_cache_min_uses指令所指定的次數的緩存項即爲非活動項將被刪除

24)open_file_cache_errors on | off

是否緩存查找時發生錯誤的文件一類的信息,默認值爲off

25)open_file_cache_min_uses number

open_file_cache指令的inactive參數指定的時長內,至少被命中此處指定的次數方可被歸類爲活動項,默認值爲1

26)open_file_cache_valid time

緩存項有效性的檢查頻率,默認值爲60s

相關文章
相關標籤/搜索