溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Linux下Nginx web服務(wù)器的實現(xiàn)及功能模塊指令詳解

發(fā)布時間:2020-07-27 19:39:24 來源:網(wǎng)絡(luò) 閱讀:655 作者:老城小敘 欄目:建站服務(wù)器

Nginx (engine x)是一個高性能的HTTP和反向代理服務(wù)器,也是一款輕量級的Web 服務(wù)器

關(guān)于http協(xié)議的相關(guān)概念:

URL統(tǒng)一資源定位符的形式:

shceme://username:password@host:port/path;params?query#frag

http事務(wù):一次請求和一次響應(yīng)構(gòu)成一次事務(wù)

request請求格式:

        <method><URL><VERSION>
        HEADERS

        <body>

response響應(yīng)格式:

        <VERSION><STATUS><REASON-PHTASE>
        HEADERS
        <body>

Method請求方法: GET/HEAD/POST,PUT/DELETE,TRACES,OPTIONS

Status code:

        1xx:
        2xx:成功響應(yīng)碼
        3xx:重定向類的響應(yīng)碼
        4xx:客戶端錯誤
        5xx:服務(wù)器端錯誤

Nginx配置文件nginx.conf的結(jié)構(gòu):

不被花括號所包含的是main block 配置段,也是全局配置段

 event{
 } 與事件驅(qū)動相關(guān)的配置段
 http{
 } 與http/https相關(guān)的配置段
 mail{
 }與郵件代理相關(guān)的配置段
 stream{
 }與負載均衡相關(guān)的配置段

作為web服務(wù)器http的配置段的結(jié)構(gòu)

  http{
      ... 配置各個server的全局配置段
      server{
          listen  80; 監(jiān)聽的端口
          server_name www.example.com
          root  /web/hosts/
          alias 
          location {OPERATOR} URL{
          ... 
              if CONDITION{
              ...
              }
          }
      }每一個server是一個虛擬站點
  }

nginx配置main block段相關(guān)指令及含義

指定work進程的運行身份:

    user nginx group;

指明pid文件的存放路徑

    pid /var/run/nginx.pid;

包含其他配置文件片段

include file_name|mask;

指明要動態(tài)裝載的模塊

load_module file_name;

錯誤日志:

    error_log /var/log/nginx/error.log varn;

與系統(tǒng)優(yōu)化相關(guān)的配置:

worker進程能夠打開文件描述符的數(shù)量上限:

    worker_rlimit_nofile  20;   配置最好與ulimit -n 數(shù)值相同,修改文件描述符的數(shù)量ulimit -HSn 180000

生成work進程數(shù)

    worker_processes 3 | auto;

woker進程的優(yōu)先級:默認為0

    worker_priority -9;

nginx的worker進程與cpu綁定

 wokrer_cpu_affinity  1000 0100 0010| auto;
     cpu mask所代表的含義:
          1000  : 四核心cpu的最后一個
          0100  : 四核心cpu的倒數(shù)第二個
          ...

用于debug使用的配置:

是否以守護進程的方式運行

     daemon on|off;

是否以master/worker模型運行

      master_process  on| off;

指定錯誤日志路徑及級別

 error_log     file warn; 指明錯誤日志路徑及名稱時不可引用變量

與events配置相關(guān)的配置段:

每個worker進程所能響應(yīng)的最大并發(fā)數(shù)

 worker_connetctions  65535;
     一臺服務(wù)器所能承載的并發(fā)響應(yīng)總數(shù)
     worker_processes  * worker_iconnections

指明并發(fā)鏈接請求的處理方法:

 use  epoll;

worker進程接受新請求的方法

 accept_mutex on|off;
     如果為on則worker進程輪流接受新的請求
     如果為off則worker進程都會接收到通知,空閑的接受請求

與站點套接字相關(guān)的配置

server{
    listen  address:port default_server  ssl http2 backlog=123 rcvbuf=512 sndbuf=512;
        #default_server:指定為默認虛擬站點
       #ssl : 限制僅能通過ssl間接站點
        #http2: 指明http協(xié)議的版本
        #backlog=number: 后援隊列長度
        #rcvbuf=接收緩沖區(qū)大小
        #sndbuf=發(fā)送緩沖區(qū)大小
    server_name SERVER_NAME;
        #SERVER_NAME 支持通配符通配;
            #例如*.abc.com
                    #支持~以字符開頭的正則表達式
            #例如~^www.*\.abc.com$
        #匹配的優(yōu)先次序:
            #1.精確匹配
            #2.左側(cè)匹配
            #3.右側(cè)匹配
            #4.正則表達式匹配    
    root  /PATH/DOCUMENT_ROOT; 指明站點的根目錄
}

在keepalived模式下的連接是否啟用TCP_NODELAY功能

tcp_nodelay  on|off;

是否啟用sendfile功能:

sendfile on|off;

在sendfile 模式下是否開啟TCP_CORK功能:

tcp_nopush on|off;

路徑相關(guān)的配置段

指定站點的根目錄,用于文件系統(tǒng)與url的映射關(guān)系

root path;

匹配URL所映射的系統(tǒng)路徑的關(guān)系

location [ = | ~ | ~* | ^~ ] url {...}
    在一個server配置段中可以有多個location的配置段
    nginx根據(jù)匹配的不同的url將其資源與不同的路徑進行映射    
    =  : 對url做精確匹配
        例如:location  =  / {
            ...
        }
    ~  : 對url做正則表達式匹配,區(qū)分字符大小寫;
    ~* : 對rul正則表達式匹配,不區(qū)分大小寫;
    ^~ : 對rul左半部分正則表達式匹配,不區(qū)分大小寫
    無符號: 對此url為開頭的所有url的做匹配
        匹配的優(yōu)先級:
            = , ^~ , ~/~* , 無符號

示例:

    server{
    root  /web/hosts/vhsost1
    location /wcdma {
    root /web/hosts/wcdma/
    index index.html index index.php
        }
    }

定義路徑的別名

location /p_w_picpaths/ {
alias /web/data/p_w_picpaths/;
}

定義站點的默認首頁資源:

index file;
     例如: index index.html index.htm index

定義錯誤的返回頁面

error_page 404 =  200 /eror_page   #相對路徑

接受多個路徑作為參數(shù),當一個資源 無法找到時自動尋找下一個,否則找默認位置

try_files file  ... url;

示例:

           location / {
            try_files index.html index.htm @default;
            }

            location @default {
            root /web/hosts/error;
            index index.html;
            }

與客戶端請求相關(guān)的配置

配置保持鏈接的超時時長, 0表示進制長連接模式

keepalive_timeout  75;

單個長連接上所能請求的最大資源數(shù)

keepalive_requests 100;

對哪種瀏覽器禁用長連接模式

keepalive_disable none|browser;

向客戶端發(fā)送響應(yīng)報文的超時時長,指兩次寫操作之間的時間間隔

send_timeout  20;

用于接受客戶端請求報文body部分的緩沖區(qū)大小,如果超出此大小則將被存儲在磁盤上由client_body_temp_path所指定的位置

client_body_buffer_size size;

指定用于存儲接受客戶端請求報文的body部分的位置

client_body_temp_path /var/tmp/client_body 2 1 1;
        2:第一個數(shù)字2表示用2位16進制數(shù)個作為1級目錄
        1:第二個數(shù)字1表示用1位16進制數(shù)個作為2級目錄
        ...

與客戶端限制相關(guān)的配置

限制響應(yīng)給客戶端的傳輸速率,單位為bytes/ second , 0 表示無限制

limit_rate 500;

限制除了指定方法的客戶端

    例如: limit_except GET {
        allow 110.11.223.0/24;
        deny all;
    }

文件操作的優(yōu)化:

是否開啟aio機制

   aio on|off | threads [=pool];

是否啟用directio機制,在LINUX主機啟用O_DIRECT標記,當請求大于設(shè)定值時,
直接跳過內(nèi)核的緩存的進程直接讀取硬盤,用于命中率較差或較大文件.

   directio size | off;

是否啟用打開文件緩存:

open_file_cache off;
  open_file_cache max=200  inactive=60;

nginx 可以緩存的三種信息:

            1.文件描述符.文件大小,最近一次修改時間;
            2.打開目錄的結(jié)構(gòu)
            3.沒有找到的或沒有權(quán)限訪問的文件相關(guān)信息;
        max=200  緩存項的上限,達到上限則使用LRU算法管理
        inactive=time 緩存項的非活動時長,指定時間內(nèi)沒有被訪問的,或命中次數(shù)少于open_file_cache_min_uses指令所指定的次數(shù)的緩存項

緩存有效性檢查頻率,時間

       open_file_cache_valid 60;

在open_file_cache inactive所指定的時間內(nèi),緩存所訪問的次數(shù)少于該數(shù)的被歸類為非活動項

 open_file_cache_min_users 1;

是否緩存查找錯誤的信息

 open_file_cache_errors  on| off;

ngx_http_access_module模塊相關(guān)的配置:

   allow ipaddress;
   deny  ipaddress;

ngx_http_auth_basic_module模塊

實現(xiàn)基于訪問控制,basic認證方式(需要借助hdpasswd生成用戶文件)

    auth_basic string|off;
    auth_basic_user_file file_name;

示例:

location /admin/ {
           alias  /web/vhosts/app1/data;
           auth_basic "Admin Area";
           auth_basic_user_file /etc/nginx/.ngxpasswd;
       }
           ~]# htpasswd -c -m /etc/nginx/.ngxpasswd tom

ngx_http_stub_status_module模塊配置:

用于輸出nginx的基本狀態(tài)信息:

   Active connections: 活動狀態(tài)的連接數(shù);
   accepts : 已經(jīng)接受的客戶端的請求總數(shù);
   handled : 已經(jīng)處理完成的請求總數(shù);
   requests : 客戶端發(fā)來的總的請求總數(shù);        
   reading : 處于讀取客戶端請求報文首部的鏈接總數(shù);
   writing : 處于向客戶端發(fā)送響應(yīng)的過程的連接數(shù);
   waiting : 處于等待客戶端發(fā)出請求的空閑連接數(shù);

示例:

 stub_status;
      location /basic_status {
          stub_status;
      }

ngx_http_log_module日志模塊

日志格式:

log_format name string;
       string可以使用nginx核心模塊的吃內(nèi)置變量

   access_log /var/log/nginx/access.log  format buffer=512  gzip=1 flush=time if=condition;
   access_log off;
     buffer=512  定義緩沖區(qū)的大小
     flush=time  刷新時間
   open_log_file_cache max=100  inactive=60  min_uses=1 valid=60;
   open_log_file_cache off;
   緩存各日志文件相關(guān)的元數(shù)據(jù);
       max 緩存的文件描述符的最大個數(shù)
       min_uses 在inactive時間內(nèi)最少被訪問的次數(shù)
       inactive  非活動時長數(shù);
       valid 驗證緩沖項是否為活動項的時間間隔;

ngx_http_gzip_module壓縮模塊;

傳輸數(shù)據(jù)時壓縮傳輸之用

   gzip on|off;

壓縮級別:

   gzip_com_level 1;

指明哪些客戶端不進行壓縮:

   gzip_disable regex...;

指明壓縮傳輸?shù)淖钚≈?/p>

   gzip_min_length 60k;

指明壓縮傳輸?shù)木彌_區(qū)個數(shù)及每個的大小

   gzip_buffers 20 100;

nginx作為代理服務(wù)器時,接受到從被代理服務(wù)器發(fā)送的響應(yīng)報文后,以何種的條件啟用壓縮

   gzip_proxied off | expired |no-cache |nostore | private | no_last_modified | no_etag |auth | any ;
       off:對代理的請求不啟用
       no-cache,no-store,private:表示從被代理服務(wù)器收的響應(yīng)報首部的Cahce_control的值為三者中的一個時啟用壓縮;

針對某些類型啟用壓縮:

   gzip_types mime-type;
   是一種壓縮過濾器,僅對該類型的壓縮
           示例:
               gzip  on;
               gzip_comp_level 6;
               gzip_min_length 64;
               gzip_proxied  any;
               gzip_types text/xml text/css application/javascript;

ngx_http_ssl_module安全模塊:

啟用https功能

  ssl on|off;

指定主機使用的ped格式的證書文件

 ssl_certificate file;

指明主機證書與之對應(yīng)的私鑰文件

 ssl_certificate_key file;

指明ssl 協(xié)議的版本

  ssl_protols [SSLv2] [SSLv3] TLSv1 TLSv1.1 TLSv2 ;

指明openssl內(nèi)建的緩存,此緩存為每個worker進程私有以及共享的緩存名大小;

 ssl_session_cache off|none| builtin 500 shared:name:500

指明客戶端的鏈接可以復(fù)用ssl session cache中緩存的ssl參數(shù)的有效時長

 ssl_session_timeout 60;

示例:

          server{
          listen 443 ssl;
          server_name www.abc.com;
          root /web/vhsts/ssl/;
          ssl on;
          ssl_certificate /etc/nginx/ssl/nginx.crt;
          ssl_certificate_key /nginx/ssl/nginx.key;
  ssl_protocols TLSv1 tlsv1.1 tlsv2 sslv2 sslv3;
         ssl_session_cache shared:sslcache:20m;
          }

ngx_http_rewrite_module模塊:

將用戶請求的URL基于regex所描述的模式進行檢查,匹配到的url將重新替換為新的url;

rewrite regex replacement flag

此模式值得注意的是:如果在同一級別下配置多個rewrite規(guī)則, 自上而下逐個匹配,完成匹配之后再次進行新的url繼續(xù)進行匹配,具有循環(huán)的機制

[flag]的標志位用于控制此循環(huán)機制;
    last:重寫完成后停止對當前URL在當前l(fā)ocation中的后續(xù)的其他重寫機制,而后對新的URL啟動新訓(xùn)創(chuàng)業(yè)的重寫機制;
    break:重寫完成后停止對當前URL在當前l(fā)ocation中后續(xù)的重寫操作,直接跳出重寫模塊
    redirect:重寫完成之后臨時重定向方式直接返回給客戶端,客戶端重新請求新的URL不能以http://或https://開頭

如果replacement 是以http://或者htts://開頭,則替換后的結(jié)果會直接以重定向的方返回給客戶端

    301:永久重定向
return 返回給客戶端狀態(tài)碼
    return code text;
    return code URL;
    return URL;

是否開啟重寫日志:

return_log on|off;

if (condition) {...}語句,一個新的配置條件滿足時,執(zhí)行配置塊中的配置指令:

condition:
    比較操作符:
        ==
        !=
        ~: 模式匹配,區(qū)分大小寫;
        ~*:模式匹配,不區(qū)分大小寫;
        !~:模式不匹配, 區(qū)分大小寫;
        !~:模式不匹配, 不區(qū)分字符大小寫;
文件及目錄存在性判斷:
                    -e, !-e
                    -f, !-f
                    -d, !-d
                    -x, !-x

用戶自定義變量:

set $variable value;

ngx_http_referer_module 模塊:跳轉(zhuǎn)模塊配置

定義referer首部的合法可用值;

valid_referers none | blocked | server_names| string ..;
    none: 請求報文首部沒有referer首部;
    blocked: 請求報文的referer首部沒有值;
    server_name: 參數(shù), 有值做為主機名或主機名模式;
        arbitrary_string: 直接字符串,但可使用*作通配符;
        regular expression:指定的正則表達式模式匹配到的字符串; 要使用~開頭,
             例如 : ~.*\.acb\.com;

配置示例:

    valid_referers none block server_names *.abc.com  abc.com ~\.abc\.com;
    if($invalid_referer) {
        return 403;
    }


向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI