淺談Nginx模塊ngx_http_core_module( 二 )

🆔 定義客戶端請求的相關配置

1️⃣ error_page 錯誤頁404

在這裏插入圖片描述

error_page 404 /404.html; 
error_page 500 502 503 504 /50x.html;
  • 這將導致內部重定向到uri 客戶端請求方法指定的內部重定向更改爲“GET”(對於除“GET”和“HEAD” 之外的所有方法)
  • 此外,可以使用=response語法將響應代碼更改爲另一個,例如:
error_page 404 =200 /empty.gif;
  • 如果錯誤響應是由代理服務器或FastCGI / uwsgi / SCGI / gRPC服務器處理的,並且服務器可能返回不同的響應代碼(例如200、302、401或404),則可以使用該代碼進行響應返回:
error_page 404 = /404.php;
  • 如果在內部重定向期間不需要更改URI和方法,則可以將錯誤處理傳遞到命名位置:
location / { 
    error_page 404 = @fallback; 
} 
location @fallback { 
    proxy_pass http://後端;

/ 如果uri處理導致錯誤,最後發生的錯誤的狀態碼將返回給客戶端。
  • 也可以使用URL重定向進行錯誤處理:
error_page 403 http://example.com/forbidden.html;
error_page 404 = 301 http://example.com/notfound.html;

/ 在這種情況下,默認情況下,響應代碼302返回給客戶端。
/ 它只能更改爲重定向狀態代碼之一(301302303307308)。
/ 當且僅當error_page 當前級別上未定義任何指令時,這些指令才從上一級繼承 。
  • 示例:當訪問www.studylinux.com不存在的時候,返回指定的404錯誤文件,指定響應碼爲200
vim /apps/nginx/conf.d/pc.conf
server {
  server_name www.studylinux.com;
  location / {
    root /data/nginx/pc;
  }
  error_page 404 = 200 /404.html;
  location /404.html {
    root /data/nginx/error_page;
  }
}

nginx -t
nginx -s reload
mkdir -p /data/nginx/error_page
echo "SORRY,I AM DEAD!" > /data/nginx/error_page/404.html
  • 修改hosts文件,測試效果
root@ubuntu1804-31:~# curl   www.studylinux.com/xxx
SORRY,I AM DEAD!
root@ubuntu1804-31:~# curl  -I  www.studylinux.com/xxx
HTTP/1.1 200 OK
Server: nginx/1.16.1
Date: Sat, 04 Jan 2020 13:02:31 GMT
Content-Type: text/html
Content-Length: 17
Last-Modified: Sat, 04 Jan 2020 12:56:12 GMT
Connection: keep-alive
ETag: "5e108b6c-11"
Accept-Ranges: bytes

2️⃣ try_files 檢查文件是否存在

在這裏插入圖片描述

  • 按指定順序檢查文件是否存在,並使用找到的第一個文件進行請求處理(結尾加斜線表⽰爲⽂件夾);
  • 該處理在當前上下文中執行。文件的路徑是file根據rootalias指令從參數 構造的 。
  • 可以通過在名稱末尾指定斜槓來檢查目錄的存在,例如“ $uri/”。如果未找到任何文件,則會進行內部重定向到uri最後一個參數中指定的文件
  • 最後⼀個參數是回退URI且必須存在,否則會出現內部500錯誤。
  • 示例
location /images/ {
    try_files $uri /images/default.gif;
}
location = /images/default.gif {
    expires 30s;
}
  • 最後一個參數也可以指向一個命名的位置,如下面的例子所示。從0.7.51版本開始,最後一個參數也可以是 code:
location / {
    try_files $uri $uri/index.html $uri.html =404;
}
  • Drupal/FastCGI示例:
location / {
    try_files $uri $uri/ @drupal;
}
location ~ \.php$ {
    try_files $uri @drupal;
    fastcgi_pass ...;
    fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
    fastcgi_param SCRIPT_NAME     $fastcgi_script_name;
    fastcgi_param QUERY_STRING    $args;
    ... other fastcgi_param's
}
location @drupal {
    fastcgi_pass ...;
    fastcgi_param SCRIPT_FILENAME /path/to/index.php;
    fastcgi_param SCRIPT_NAME     /index.php;
    fastcgi_param QUERY_STRING    q=$uri&$args;
    ... other fastcgi_param's
}
  • 上述例子中try_files
location / {
    try_files $uri $uri/ @drupal;
}
  • 該try_files指令由兩段代碼組成
#  第一部分
location / {
    error_page 404 = @drupal;
    log_not_found off;
}

# 第二部分
location ~ \.php$ {
    try_files $uri @drupal;
    fastcgi_pass ...;
    fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
    ...
}

# try_files 在將請求傳遞給FastCGI服務器之前檢查PHP文件的存在
  • Wordpress和Joomla的示例
location / {
    try_files $uri $uri/ @wordpress;
}
location ~ \.php$ {
    try_files $uri @wordpress;
    fastcgi_pass ...;
    fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
    ... other fastcgi_param's
}
location @wordpress {
    fastcgi_pass ...;
    fastcgi_param SCRIPT_FILENAME /path/to/index.php;
    ... other fastcgi_param's
}

3️⃣ keepalive_timeout 設定長連接的超時時長

在這裏插入圖片描述

  • 第一個參數設置保持連接的超時時長,0表示禁止長連接。默認爲75s,推薦120s

  • 可選的第二個參數在Keep-Alive:timeout = time響應頭域中設置一個值。兩個參數可能不同。

  • Mozilla和Konqueror可以識別 Keep-Alive:timeout = time頭域。MSIE在大約60秒內自行關閉保持連接。

4️⃣ keepalive_requests 長連接允許請求的資源的最大數量

在這裏插入圖片描述
在一次長連接上所允許請求的資源的最大數量。默認爲100次

5️⃣ keepalive_disable 對哪種瀏覽器禁用長連接

在這裏插入圖片描述

6️⃣ send_timeout 設置用於向客戶端發送響應的超時時間

在這裏插入圖片描述

  • 設置用於向客戶端發送響應的超時時間。
  • 超時僅在兩個連續的寫入操作之間設置,而不是傳輸整個響應。
  • 如果客戶端在這段時間內沒有收到任何內容,則連接被關閉

7️⃣ client_body_buffer_size

在這裏插入圖片描述

  • 設置讀取客戶端請求體的緩衝區大小。
  • 如果請求體大於緩衝區,則整個身體或僅將其部分寫入 臨時文件。
  • 默認情況下,緩衝區大小等於兩個內存頁面。這是x86上的8K,其他32位平臺和x86-64。其他64位平臺通常爲16K
  • 超出此大小時,其將被暫存到磁盤上的由client_body_temp_path指令所定義的位置

8️⃣ client_body_temp_path

在這裏插入圖片描述

  • 定義用於存儲包含客戶端請求正文的臨時文件的目錄。
  • 在指定目錄下最多可以使用三級子目錄層次結構。例如,在以下配置中
client_body_temp_path / spool / nginx / client_temp 1 2;
  • 設定存儲客⼾端請求報⽂的body部分的臨時存儲路徑及⼦⽬錄結構和數量,⽬錄名爲16進制的數字,
    使⽤hash之後的值從後往前截取1位、2位、2位作爲⽂件名:
[root@s3 ~]# md5sum /data/nginx/html/pc/index.html
95f6f65f498c74938064851b1bb 96 3d 4 /data/nginx/html/pc/index.html
1級⽬錄佔116進制,即2^4=16個⽬錄 0-f
2級⽬錄佔216進制,即2^8=256個⽬錄 00-ff
3級⽬錄佔216進制,即2^8=256個⽬錄 00-ff
配置⽰例:
client_max_body_size 10m;
client_body_buffer_size 16k;
client_body_temp_path /apps/nginx/temp 1 2 2; #reload Nginx會⾃動創建temp⽬錄

🆔 對客戶端進行限制的相關配置

1️⃣ limit_rate 限制響應給客戶端的傳輸速率

在這裏插入圖片描述

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

2️⃣ limit_except

在這裏插入圖片描述

  • 限制客戶端使用除了指定的請求方法之外的其它方法,只能用在location上下文。
  • Method:
GET, HEAD, POST, PUT, DELETE

MKCOL, COPY, MOVE, OPTIONS, PROPFIND,

PROPPATCH, LOCK, UNLOCK, PATCH
  • 示例
limit_except GET HEAD POST {
    deny 192.168.111.200
    allow 192.168.111.0/24;
    deny all;
}
  • 表示除了GET、HEAD、POST方法其他方法都限制,
  • 主機範圍爲:禁止192.168.111.200、允許192.168.111.0/24、禁止所有。
  • 即僅允許192.168.111.0網段訪問,但是禁止192.168.111.200的地址訪問

🆔 文件操作優化的配置

1️⃣ aio 是否啓用異步I/O功能

在這裏插入圖片描述

  • linux 2.6以上內核提供以下⼏個系統調⽤來⽀持aio:
    1、SYS_io_setup:建⽴aio 的context
    2、SYS_io_submit: 提交I/O操作請求
    3、SYS_io_getevents:獲取已完成的I/O事件
    4、SYS_io_cancel:取消I/O操作請求
    5、SYS_io_destroy:毀銷aio的context

2️⃣ directio 是否同步寫磁盤

在這裏插入圖片描述

  • 操作完全和aio相反,aio是讀取⽂件⽽directio是寫⽂件到磁盤
  • 啓⽤直接I/O,默認爲關閉,當⽂件⼤於等於給定⼤⼩時,例如directio 4m,同步(直接)寫磁盤,⽽⾮寫緩存。

3️⃣ open_file_cache 是否緩存打開過的⽂件信息

在這裏插入圖片描述

  • nginx可以緩存以下三種信息:
    (1) ⽂件元數據:⽂件的描述符、⽂件⼤⼩和最近⼀次的修改時間
    (2) 打開的⽬錄結構
    (3) 沒有找到的或者沒有權限訪問的⽂件的相關信息
  • max=N:可緩存的緩存項上限數量;達到上限後會使⽤LRU(Least recently used,最近最少使⽤)算法實現
    管理
  • inactive=time:緩存項的⾮活動時⻓,在此處指定的時⻓內未被命中的或命中的次數少於
    open_file_cache_min_uses指令所指定的次數的緩存項即爲⾮活動項,將被刪除

4️⃣ open_file_cache_errors

在這裏插入圖片描述

  • 是否緩存查找時發⽣錯誤的⽂件⼀類的信息
  • 默認值爲off

5️⃣ open_file_cache_min_uses

在這裏插入圖片描述

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

6️⃣ open_file_cache_valid

在這裏插入圖片描述

  • 緩存項有效性的檢查驗證頻率,默認值爲60s
  • 示例
aio                      on;                         # 開啓異步I/O
directio                 4m;                         # 開啓同步磁盤文件大小>4M
open_file_cache          max=1000 inactive=20s;      # 最⼤緩存1000個⽂件,⾮活動數據超時時⻓20s
open_file_cache_valid    30s;                        # 每間隔30s檢查⼀下緩存數據有效性
open_file_cache_min_uses 2;                          # 30秒內⾄少被命中訪問2次才被標記爲活動數據
open_file_cache_errors   on;                         # 緩存錯誤信息

ngx_http_core_modules常用模塊就寫這些了

發佈了107 篇原創文章 · 獲贊 20 · 訪問量 6362
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章