第十三周《詳細描述常見nginx常用..》上

一丶詳細描述常見nginx常用模塊和模塊的使用示例

1.前言
Nignx(Engine X)是一款高度模塊化的塌计,輕量級的,高性能的HTTP和反向代理服務侯谁,其特點是占有內(nèi)存少锌仅,并發(fā)能力強。本文將會介紹Nginx的常用模塊及相關案例墙贱,了解并掌握相應模塊的配置將幫助我們更快更好地了解掌握Nginx服務的配置热芹。官方的模塊介紹鏈接為:http://nginx.org/en/docs/
2.I/O模型:
阻塞型、非阻塞型惨撇、復用型伊脓、信號驅(qū)動型、異步

  • 同步/異步:關注消息通知機制
    消息通知:
    同步:等待對方返回消息
    異步:被調(diào)用者通過狀態(tài)魁衙、通知或回調(diào)機制通知調(diào)用者被調(diào)用者的運行狀態(tài)

  • 阻塞/非阻塞:關注調(diào)用者在等待結(jié)果返回之前所處的狀態(tài)
    阻塞:blocking报腔,調(diào)用結(jié)果返回之前,調(diào)用者被掛起剖淀;
    非阻塞:nonblocking纯蛾,調(diào)用結(jié)果返回之前,調(diào)用者不會被掛起纵隔;

  • 一次文件IO請求翻诉,都會由兩個階段組成:
    第一步:等待數(shù)據(jù)帆卓,即數(shù)據(jù)從磁盤到內(nèi)核內(nèi)存
    第二步:復制數(shù)據(jù),即數(shù)據(jù)內(nèi)核內(nèi)存到進程內(nèi)存

阻塞型:第一步阻塞米丘,第二步阻塞
非阻塞型: 第一步非阻塞剑令,第二步阻塞
復用型:第一步阻塞,第二步阻塞拄查;第一步阻塞在多路I/O上吁津,調(diào)用內(nèi)核復用器
信號驅(qū)動型:第一步完成后調(diào)用返回,非阻塞堕扶;第二步阻塞
異步:完全異步型I/O

  • 復用型IO調(diào)用
    select(): 1024
    poll(): 無限制
  • enent-driven:
    epoll(linux):libevent
    Kqueue(BSD):
    /dev/poll (Solaris)
  1. Nginx的程序架構(gòu):
  • 3.1master/worker
    一個master進程:負責加載和分析配置文件碍脏,管理worker進程,平滑升價
    一個或多個worker進程:處理并相應客戶請求
  • 3.2緩存相關的進程:
    cache loader:載入緩存對象
    cache manager:管理緩存對象
  • 3.3特性:異步稍算、事件驅(qū)動和非阻塞
    并發(fā)請求處理:通過epoll/select
    文件IO:高級IO sendfile典尾,異步,mmap
    nginx模塊:高度模塊化糊探,但其模塊早期不支持DSO機制钾埂;近期版本支持動態(tài)裝載和卸載;

4.模塊分類:
核心模塊:core module
HTTP modules(http模塊):
Standard HTTP modules標準的http模塊
Optional HTTP modules可選的http模塊
Mail modules郵件模塊
Stream modules:流模塊科平,傳輸層代理褥紫,4層tcp和udp代理,傳輸層代理
3rd party modules第三方模塊

5.nginx的功用:
靜態(tài)的web資源服務器瞪慧;(圖片服務器髓考,或js/css/html/txt等靜態(tài)資源服務器);
結(jié)合FastCGI/uwSGI/SCGI等協(xié)議反代動態(tài)資源請求弃酌;
http/https協(xié)議的反向代理氨菇;
imap4/pop3協(xié)議的反向代理;
tcp/udp協(xié)議的請求轉(zhuǎn)發(fā)妓湘;

6.nginx安裝與常用模塊指令
6.1nginx安裝

[root@wujunjie ~]# vim /etc/yum.repos.d/nginx.repo 
[nginx]
baseurl=https://mirrors.aliyun.com/epel/7Server/x86_64/
enabled=1
gpgcheck=0
[root@wujunjie ~]# yum install nginx -y
[root@wujunjie ~]# vim /etc/nginx/nginx.conf    #查看主配置文件
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;  #自動探測有幾個cpu就啟動幾個進程
error_log /var/log/nginx/error.log;#錯誤日期目錄
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf; #動態(tài)裝載模塊

events {
    worker_connections 1024;#單個進程響應1024個請求
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';#訪問格式名稱:地址查蓉;用戶;本地時間多柑;請求奶是;響應碼;字節(jié)數(shù)竣灌;引用;客戶端代理秆麸;記錄真正客戶端地址初嘹;

    access_log  /var/log/nginx/access.log  main;#訪問日志路徑

    sendfile            on;#提升效能
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;#保持連接65秒
    types_hash_max_size 2048;#加入內(nèi)存中匹配過的保存值大的hash值2048個類型

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;默認識別8進制數(shù)據(jù)流

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;
 server {
        listen       80 default_server;  #默認虛擬主機監(jiān)聽80端口
        listen       [::]:80 default_server;
        server_name  _;    #匹配所有主機
        root         /usr/share/nginx/html;#頁面根目錄

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        }

        error_page 404 /404.html;#錯誤頁面
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;錯誤頁面
            location = /50x.html {
        }
    }

6.2主配置文件結(jié)構(gòu):

                main block:#主配置段,也即全局配置段沮趣;
                    event {
                        ...
                    }:#事件驅(qū)動相關的配置屯烦;
                http {
                    ...
                }:#http/https 協(xié)議相關的配置段;
                mail {
                    ...
                }#郵件相關配置段;
                stream {
                    ...
                }#四層代理配置段驻龟;

Nginx(2)

配置指令:
  • main配置段常見的配置指令:
    分類:

正常運行必備的配置
優(yōu)化性能相關的配置
用于調(diào)試及定位問題相關的配置
事件驅(qū)動相關的配置

一. 正常運行必備的配置:

1.user:定義工作進程使用的用戶和組温眉,如果省略組,則使用名稱等于用戶名的組翁狐。
syntax:user user [group];
Default: user nobody nobody;
Context: main
2.pid /PATH/TO/PID_FILE:指定存儲nginx主進程進程號碼的文件路徑类溢。
3.include file | mask :指明包含進來的其他配置文件片段。
4.load_module file:指明要裝載的動態(tài)模塊露懒。

二. 性能優(yōu)化相關的配置:
1.worker_processes number | auto;
worker進程的數(shù)量闯冷;通常應該等于小于當前主機的cpu的物理核心數(shù);
auto:當前主機物理cpu核心數(shù)懈词;
2.worker_cpu_affinity cpumask ...
worker_cpu_affinity auto [cpumask];
CPU MASK:
00000000:表示8顆cpu核心
00000001:0號cpu
00000010:1號cpu
... ...
3.worker_priority number: 指定worker進程的nice值蛇耀,設定worker進程的優(yōu)先級;
優(yōu)先級范圍:[-20,20]
4.worker_rlimit_nofile number: worker進程能夠打開的文件數(shù)量上限坎弯;

示例:
   [root@wujunjie nginx]# vim nginx.conf
        #在main配置文件中添加如下內(nèi)容
        worker_cpu_affinity auto;  #添加此段用來自動綁定cpu纺涤,提升nginx服務器性能
        worker_priority -5;    #調(diào)整優(yōu)先級為-5
        worker_rlimit_nofile 65536;   #進程所能夠打開的文件數(shù)量為65535
   [root@wujunjie nginx]# nginx -s reload
[root@wujunjie nginx]# watch -n0.5 'ps axo comm,pid,psr,ni | grep nginx'                    
Every 0.5s: ps axo comm,pid,psr,ni | grep nginx                   Thu Nov  8 10:17:51 2018

nginx             1579   0   0
nginx             7071   0  -5

三.調(diào)試、定位問題:

1.daemon on | off:是否以守護進程方式運行Nginx抠忘;
2.master_process on | off: 是否以master/worker模型運行nginx; 默認為on;
3.error_log file [level];定義錯誤日志路徑與級別洒琢;

四.事件驅(qū)動相關的配置:

event {
    ...
}

1.worker_connections number:每個worker進程所能打開的最大并發(fā)連接數(shù)量;
總的最大并發(fā)響應數(shù)量:worker_reocesses*worker_connections
2.use method:指明并發(fā)連接請求的處理方法
use epoll褐桌;
3.accept——mutex on | off:處理新的連接請求的方法
on:意味著由各worker輪流處理新請求
off:意味著每個新請求的到達都會通知所有的worker進程

http協(xié)議相關的配置

一. 與套接字相關的配置

1.server { ... } :配置一個虛擬主機

 server {
     listen address[:PORT]|PORT;
     server_name SERVER_NAME;
     root /PATH/TO/DOCUMENT_ROOT;                            
 }

2.listen PORT | address[:port] | unix:/PATH/TO/SOCKET_FILE listen address[:port] [default_server] [ssl] [http2 | spdy] [backlog=number] [rcvbuf=size] [sndbuf=size] ;

default_server:設定為默認虛擬主機
ssl:限制僅能夠通過ssl連接提供服務

backlog=number:后援隊列長度
rcvbuf=size:接收緩沖區(qū)大小
sndbuf=size:發(fā)送緩沖區(qū)大小

3.server_name name ...; 指明虛擬主機的名稱衰抑,后可根多個由空白字符分割的字符串;

  • 支持*通配任意長度的任意字符荧嵌;例:server_name .magedu.com www.magedu.
  • 支持~起始的字符做正則表達式模式授權(quán)呛踊;例:server_name ~^www.\d+.magedu.com$
  • 匹配機制:

<1> 首先是字符串精確匹配;
<2> 左側(cè)通配符啦撮;
<3> 右側(cè)
通配符谭网;
<4> 正則表達式;

練習:定義四個虛擬主機赃春,混合使用三種類型的虛擬主機愉择;僅開放給來自于本地網(wǎng)絡中的主機訪問;(開放給本地網(wǎng)絡中的主機把allow 后的IP地址改為網(wǎng)絡地址192.168.0.0/16即可)
        #在/etc/nginx/conf.d目錄下編輯配置文件
  [root@localhost conf.d]# vim vhost1.conf
      server {
          listen 80;
          server_name 192.168.43.125;
          root /data/nginx/vhost1;
          location / {
              allow 192.168.32.128;
              deny all;
          }
      }
      server {
          listen 80;
          server_name  www.ilinux.*;
          root /data/nginx/vhost1;
          location / {
              allow 192.168.32.128;
              deny all;
          }
      }
      server {
          listen 80;
          server_name ~^www\d+\.ilinux\.com$;
          root /data/nginx/vhost1;
          location / {
              allow 192.168.0.0/16;
              deny all;
          }
      }
      server { 
          listen 192.168.43.125:8080;
          server_name www3.ilinux.*;
          root /data/nginx/vhost2/;
          location / {
              allow 192.168.32.128;
              deny all;
          }
      }

4.tcp_nodelay on | off;

  • 在keepalived模式下的連接是否啟用TCP_NODELAY選項织中;
  • delay:延遲發(fā)送锥涕;nodelay on:要求不要合并發(fā)送,請求一個發(fā)送一個狭吼;對非保持連接無效层坠;
    5.tcp_nopush on | off
  • 在sendfile模式下,是否啟用TCP_CORK選項
  • nopush on :在一個包中發(fā)送響應頭和文件的開頭;以完整的包發(fā)送文件
    6.sendfile on | off刁笙;
  • 是否啟用sendfile 功能破花;
  • 系統(tǒng)調(diào)用sendfile()通過 DMA把硬盤數(shù)據(jù)拷貝到 kernel buffer谦趣,然后數(shù)據(jù)被 kernel直接拷貝到另外一個與 socket相關的 kernel buffer,這里沒有 user mode和 kernel mode之間的切換座每,在 kernel中直接完成了從一個 buffer到另一個 buffer的拷貝前鹅;DMA 把數(shù)據(jù)從 kernelbuffer 直接拷貝給協(xié)議棧,沒有切換峭梳,也不需要數(shù)據(jù)從 user mode 拷貝到 kernel mode舰绘,因為數(shù)據(jù)就在 kernel 里。步驟減少了延赌,切換減少了除盏,拷貝減少了,自然性能就提升了
二. 定義路徑相關的配置

7.root path

  • 設置web資源路徑映射挫以;用于指明用戶請求的url所對應的本地文件系統(tǒng)上的文檔所在目錄路徑者蠕;
  • 可用的位置:http, server, location, if in location;
    8.location [ = | ~ | ~* | ^~ ] uri { ... }
  • 根據(jù)請求的URI設置配置
  • 在一個server中的location配置段可存在多個掐松,用于實現(xiàn)從URI到文件系統(tǒng)的路徑映射踱侣;nginx會根據(jù)用戶請求的uri來檢查定義的所有l(wèi)ocation,并找出一個最佳匹配大磺,而后應用其配置抡句;
  • 匹配符:

- = :對uri做精確匹配
- ~: 對uri做正則表達式模式匹配,區(qū)分字符大小寫
- ~*:對uri做正則表達式模式匹配杠愧,不區(qū)分字符大小寫
- ^~: 對uri的左半部分做匹配檢查待榔,不區(qū)分字符大小寫

  • 不帶符號:匹配起始于次uri的所有url

  • 匹配優(yōu)先級:=,^,/~*,不帶符號流济;

  示例:
  #編輯配置文件
 [root@wujunjie ~]# vim /etc/nginx/conf.d/vhost1.conf 
          server {
          listen 80;
          server_name www.ilinux.io;
          root /data/nginx/vhost1;
          location / {
                  #root /data/nginx/vhost2;
                  allow all;
          }
          location ~*  \.(jpg|png)$ {
                  allow all;
          }
          location ^~ /images/ {
                  root /data/pictures/;
  #創(chuàng)建目錄
  [root@wujunjie ~]# mkdir -pv /data/pictures/images
  [root@wujunjie ~]# mv sky.jpg /data/pictures/images/

使用另外主機訪問測試锐锣,顯示正常如圖;
  • 注意:在location /images/{}中的第一個/ 匹配/data/pictures/目錄绳瘟;因此訪問www.ilinux.io/images/sky.jpg,即為/data/pictures/images/sky.jpg;
    9.alias path雕憔;

  • 定義路徑別名,文檔映射的另一種機制糖声,僅能用于location上下文斤彼;

  • 注意:location中使用root指令和alias指令的意義不同
    - root,給定的路徑對應于location中的/uri/左側(cè)的/;
    - alias,給定的路徑對應于location中的/uri/右側(cè)的/;

  示例:
  #將上文配置中的location上下文中的root修改為alias即可
      location ^~ /images/ {
              alias /data/pictures;
          }
  #復制圖片到/data/pictures目錄下訪問測試
  [root@wujunjie vhost1]# cp dice.jpg /data/pictures/

使用另外主機訪問測試如下圖所示
  1. index file ...;
  • 默認資源琉苇;可用于http,server,location中

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

  • 定義錯誤顯示的URI
   示例:
   #修改配置文件
   [root@wujunjie ~]# vim /etc/nginx/conf.d/vhost1.conf
       server {
          listen 80;
          server_name www.ilinux.io;
          root /data/nginx/vhost1;
          error_page 404 =200 /notfound.html;
          location / {
                  #root /data/nginx/vhost2;
                  allow all;
          }
          location ~*  \.(jpg|png)$ {
                  allow all;
          }
          location ^~ /images/ {
                   alias /data/pictures/;
          }
          location = /notfound.html {
                  root /data/nginx/error_pages;
          }
         }
         #創(chuàng)建目錄,和錯誤頁面信息
         [root@localhost ~]# mkdir /data/nginx/error_pages
         [root@localhost ~]# vim /data/nginx/error_pages/notfound.html
             <h1>蟋恬。翁潘。。歼争。拜马。。沐绒。</h1>
              <h2> you are sha X</h2>
          [root@localhost ~]# nginx -s reload

使用另外的主機隨便訪問不存在的頁面測試如下圖
三. 定義客戶端請求的相關配置

12.keepalive_timeout timeout [header_timeout]俩莽;

  • 設定保持連接的超時時長,0表示禁止長連接乔遮;默認為75s扮超;
  • Context: http, server, location

13.keepalive_requests number;

  • 在一次長連接上所允許請求的資源最大數(shù)量,默認為100蹋肮;
  • Context: http, server, location

14.keepalive_disable none | browser ...;

  • 對哪種瀏覽器禁用長連接出刷;
  • Context: http, server, location

15.send_timeout time;

  • 向客戶端發(fā)送響應報文的超時時長,此處是指兩次寫操作之間的間隔時長坯辩;

16.client_body_temp_path path [level1 [level2 [level3]]];

  • 設定用于存儲客戶端請求報文的body部分的臨時存儲路徑及子目錄結(jié)構(gòu)和數(shù)量
    16進制的數(shù)字表示:client_body_temp_path /var/tmp/client_body 2 1 1

2: 表示用2位16進制數(shù)字表示一級子目錄;00-ff
1: 表示用1位16進制數(shù)字表示2級子目錄馁龟;0-f
1:表示用1位16進制數(shù)字表示3級子目錄;0-f

四. 對客戶端進行限制的相關配置:

18.limit_rate rate;

  • 限制響應給客戶端的傳輸速率漆魔,單位是bytes/second,0表示無限制坷檩;
    Context: http, server, location, if in location

19.limit_except method ... {...}

  • 限制對指定的請求方法之外的其它方法的使用客戶端;
示例:
         limit_except GET {
         allow 192.168.1.0/24;
         deny all;
     }
     #除了GET和HEAD之外改抡,其它所有的method都允許192.168.1.0/24網(wǎng)絡地址訪問矢炼,其它ip地址都拒絕;
五. 文件操作優(yōu)化的配置

20.aio on | off |threads[=pool];

  • 是否啟用aio功能阿纤;默認為off
  • Context: http, server, location

21.directio size | off;

  • 在linux主機啟用O_DIRECT標記句灌,此處意味文件大于等于給定的大小時使用,例如:directio 4m;

22.open_file_cache off;

open_file_cache max=N [inactive=time];
  • Configures a cache that can store欠拾;
  • nginx可以緩存以下三種信息:

- <1> 文件的描述符胰锌、文件大小和最近一次的修改時間;
- <2> 打開的目錄結(jié)構(gòu)清蚀;
- <3> 沒有找到的或者沒有權(quán)限訪問的文件的相關信息匕荸;

  • max=N: 可緩存的緩存項上限;達到上限后會使用LRU算法(最近最少使用)實現(xiàn)緩存管理枷邪;
  • inactive=time:緩存項的非活動時長榛搔,在此處指定的時長內(nèi)未被命中的或命中的次數(shù)少于open_file_cache_min_uses指令所指定的次數(shù)的緩存項即為非活動項;

23.open_file_cache_valid time;

  • 緩存項有效性的檢查頻率东揣;默認為60s践惑;

24.open_file_cache_min_uses number;

  • 在open_file_cache指令的inactive參數(shù)指定的時長內(nèi),至少應該被命中多少次方可被歸類為活動項嘶卧;

25.open_file_cache_errors on|off;

  • 是否緩存查找時發(fā)生錯誤的文件一類的信息尔觉;
六. ngx_http_access_module模塊:實現(xiàn)基于ip的訪問控制功能

26.allow address | CIDR | unix:| all;
27.deny address | CIDR | unix | all;
可用的位置:http,server,location,limit_except

七. ngx_http_auth_basic_module模塊:實現(xiàn)基于用戶的訪問控制芥吟,使用basic機制進行用戶認證

28.auth_basic string | off;

  • Default:auth_basic off;
  • Context: http, server, location, limit_except

29.auth_basic_user_file file;

  • 注意:htpasswd命令由httpd-tools所提供侦铜;
示例:
  [root@wujunjie ~]# yum -y install httpd-tools
  [root@wujunjie ~]# htpasswd -c -m /etc/nginx/.ngxpasswd tom
  New password: 
  Re-type new password: 
  Adding password for user tom
  #修改nginx配置文件
  [root@wujunjie ~]# vim /etc/nginx/conf.d/vhost1.conf 
  #在vhost1.conf配置中添加新的location专甩,如下:
      location ~* ^/(admin|login) {
              auth_basic "admin area or login url";
              auth_basic_user_file /etc/nginx/.ngxpasswd; 
  #創(chuàng)建目錄和admin主頁
  [root@wujunjie ~]# mkdir /data/nginx/vhost1/admin
  [root@wujunjie ~]# vim /data/nginx/vhost1/admin/index.html
  [root@wujunjie ~]# nginx -t
  [root@wujunjie ~]# nginx -s reload

使用另外主機測試訪問:
八. ngx_http_stub_status_module模塊:用于輸出nginx的基本狀態(tài)信息

30.stub_status;

配置示例:
     [root@wujunjie ~]# vim /etc/nginx/conf.d/vhost1.conf 
         location ~* ^/(admin|login) {
            auth_basic "admin area or login url";
            auth_basic_user_file /etc/nginx/.ngxpasswd;
            stub_status;
        }
     [root@wujunjie ~]# nginx -s reload

訪問測試:

Active connections: 活動狀態(tài)的連接數(shù);
accepts:已經(jīng)接受的客戶端請求的總數(shù)钉稍;
handled:已經(jīng)處理完成的客戶端請求的總數(shù)涤躲;
requests:客戶端發(fā)來的總的請求數(shù);
Reading:處于讀取客戶端請求報文首部的連接的連接數(shù)贡未;
Writing:處于向客戶端發(fā)送響應報文過程中的連接數(shù)种樱;
Waiting:處于等待客戶端發(fā)出請求的空閑連接數(shù)

九. ngx_http_log_module模塊:用于以指定的格式寫入請求日志

31.log_format name string ...;

  • string 可以使用nginx核心模塊及其它模塊的內(nèi)嵌變量
  • 注意:此配置只能用于http段中

32.access_log path [format [buffer=size] [gzip=[level1]] [flush=time][if=condition]];
access_log off;

  • 訪問日志文件路徑,格式及相關的緩沖的配置俊卤;
    - buffer=size: 設置日志緩沖區(qū)大小
    - flush=time:定義清空時長

33.open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
open_log_file_cache off;

  • 緩存各日志文件相關的元數(shù)據(jù)信息嫩挤;
  • max:緩存的最大文件描述符數(shù)量;
  • min_uses:在inactive指定的時長內(nèi)訪問大于等于此值方可被當作活動項消恍;
  • inactive:非活動時長
  • valid:驗證緩存中各緩存項是否為活動項的時間間隔
示例:為nginx定義使用類似于httpd的combined格式的訪問日志
  #在/etc/nginx/nginx.conf文件中http段配置日志格式
  [root@wujunjie ~]# vim /etc/nginx/nginx.conf
      http {
           log_format comd '$remote_addr - $remote_user [$time_local] '
                           '"$request" $status $bytes_sent '
                           '"$http_referer" "$http_user_agent"';
          ...
      }
  #給vhost1主機添加訪問日志岂昭,設置為comd格式
  [root@wujunjie ~]# vim /etc/nginx/conf.d/vhost1.conf
      server {
          ...
          access_log /var/log/nginx/vhost1-access.log comd;
          ...
      }   
  #訪問測試后查看日志格式
  [root@wujunjie ~]# tail -2 /var/log/nginx/vhost1-access.log 
  192.168.1.106 - tom [06/Aug/2018:23:18:27 +0800] "GET /images HTTP/1.1" 301 388 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"
  192.168.1.106 - tom [06/Aug/2018:23:18:27 +0800] "GET /images/ HTTP/1.1" 403 324 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"
十. ngx_http_gzip_module:用gzip格式壓縮響應;

1.gzip on | off;
Enables or disables gzipping of responses.
2.gzip_comp_level level;
Sets a gzip compression level of a response. Acceptable values are in the range from 1 to 9.
3.gzip_disable regex ...;
Disables gzipping of responses for requests with “User-Agent” header fields matching any of the specified regular expressions.
4.gzip_min_length length;
啟用壓縮功能的響應報文大小閾值哺哼;
5.gzip_buffers number size;
支持實現(xiàn)壓縮功能時為其配置的緩沖區(qū)數(shù)量及每個緩存區(qū)的大信迥ā;
6.gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;
nginx作為代理服務器接收到從被代理服務器發(fā)送的響應報文后取董,在何種條件下啟用壓縮功能的棍苹;
off:對代理的請求不啟用
no-cache, no-store,private:表示從被代理服務器收到的響應報文首部的Cache-Control的值為此三者中任何一個茵汰,則啟用壓縮功能枢里;
7.gzip_types mime-type ...;
壓縮過濾器,僅對此處設定的MIME類型的內(nèi)容啟用壓縮功能蹂午;

  配置示例:   
  gzip  on;
  gzip_comp_level 6;
  gzip_min_length 64;
  gzip_proxied any;
  gzip_types text/xml text/css  application/javascript;  

此配置可用位置:http, server, location

十一. ngx_http_ssl_module模塊:

1.ssl on | off;
是否啟用htttps協(xié)議
2.ssl_certificate file;
當前虛擬主機使用PEM格式的證書文件栏豺;
3.ssl_certificate_key file;
當前虛擬主機上與其證書匹配的私鑰文件;
4.ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1][TLSv1.2]
支持ssl協(xié)議版本豆胸,默認為后三個奥洼;
5.ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
builtin[:size]:使用Openssl內(nèi)建的緩存,此緩存為每worker進程私有晚胡;
[shared:name:size]:在各worker之間使用一個共享的緩存灵奖;
6.ssl_session_timeout time;
客戶端一側(cè)的連接可以服用ssl session cache中緩存的ssl參數(shù)的有效時長;

配置示例:

 #創(chuàng)建私有CA自簽證書估盘,以192.168.32.132為CA

[root@www ~]# cd /etc/pki/CA

[root@www CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048)

Generating RSA private key, 2048 bit long modulus

........................................................................+++

..................................+++

e is 65537 (0x10001)

[root@www CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [XX]:CN

State or Province Name (full name) []:ZHEJIANG

Locality Name (eg, city) [Default City]:NINGBO

Organization Name (eg, company) [Default Company Ltd]:ilinux.com

Organizational Unit Name (eg, section) []:opt

Common Name (eg, your name or your server's hostname) []:www.ilinux.com

Email Address []:

[root@www CA]# touch index.txt

[root@www CA]# echo 01 > serial

 #在nginx主機上生成私鑰和申請證書

[root@wujunjie ~]# mkdir /etc/nginx/ssl

[root@wujunjie ~]# (umask 077;openssl genrsa -out /etc/nginx/ssl/.nginx.key 2048)

[root@wujunjie ~]# openssl req -new -key /etc/nginx/ssl/.nginx.key -out /etc/nginx/ssl/nginx.crs -days 365

 [root@wujunjie ssl]# scp nginx.csr [root@192.168.32.132:/tmp](mailto:root@192.168.32.132:/tmp)

 #在CA上簽署證書

 [root@www CA]# openssl ca -in /tmp/nginx.csr -out certs/nginx.crt -days 365

 #把簽署好的證書nginx.crt傳會nginx主機

[root@www CA]# scp certs/nginx.crt root@192.168.32.128:/etc/nginx/ssl #修改nginx配置文件瓷患,啟用ssl

 [root@wujunjie ~]# vim /etc/nginx/conf.d/vhost1.conf

server {

 listen 443 ssl;

 server_name www1.ilinux.com;

 root /data/nginx/vhost1;

 index index.html

 error_page 404 =200 /notfound.html;

 access_log /var/log/nginx/vhost1-access.log main;

 ssl on;

 ssl_certificate /etc/nginx/ssl/nginx.crt;

 ssl_certificate_key /etc/nginx/ssl/.nginx.key;

 ssl_protocols sslv2 sslv3 tlsv1 tlsv1.1 tlsv1.2;

 ssl_session_cache shared:SSL:10m;

 location / {

  allow all;

 }

 }

[root@wujunjie ~]# vim /data/nginx/vhost1/index.html

<h1>nginx</h1>

<h2>192.168.32.128</h2>

 #檢查語法,重載配置

 [root@wujunjie ~]# nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

[root@wujunjie ~]# nginx -s reload
檢驗效果圖
十二. ngx_http_rewrite_module模塊:
  • 用于使用正則表達式模式更改請求URI遣妥,返回重定向擅编,并有條件的選擇配置
    例如:

bbs.magedu.com/ --> www.magedu.com/bbs/
http://www.magedu.com/ --> https://www.magedu.com/
http://www.magedu.com/login.php;username=tom --> http://www.magedu.com/tom/
http://www.ilinux.io/bbs/ --> http://bbs.ilinux.io/

  • 將用戶請求的URI基于regex所描述的模式進行檢查,然后完成替換;

1.rewrite regex replacement [flag]
將用戶請求的URI基于regex所描述的模式進行檢查爱态,匹配到時將其替換為replacement指定的新的URI;

  • 注意:如果在同一級配置塊中存在多個rewrite規(guī)則谭贪,那么會自下而上逐個檢查;被某條件規(guī)則替換完成后肢藐,會重新一輪的替換檢查故河,因此吱韭,隱含有循環(huán)機制吆豹;[flag]所表示的標志位用于控制此循環(huán)機制;
  • 如果replacement是以http://或https://開頭理盆,則替換結(jié)果會直接以重定向返回給客戶端痘煤;301:永久重定向;
  • [flag]:

last:重寫完成后停止對當前URI在當前l(fā)ocation中后續(xù)的其他重寫操作猿规,而后對新的URI啟動新的一路重寫檢查衷快;提前重啟新一輪循環(huán);
break:重寫完成后停止對當前URI在當前l(fā)ocation中后續(xù)的其他重寫操作姨俩,而后直接跳轉(zhuǎn)至重寫規(guī)則配置塊之后的其他配置蘸拔;循環(huán)結(jié)束;
redirect:重寫完成后以臨時重定向方式直接返回重寫后生成的新URI給客戶端环葵,有客戶端重新發(fā)起請求调窍;不能以http://或https://開頭;
permanent:重寫完成后以永久重定向方式直接返回重寫后生成的新URI給客戶端张遭,由客戶端重新發(fā)起請求邓萨;

2.return

  • 停止處理并將指定的代碼返回給客戶端

return code [text];
return code URL;
return URL;

3.rewrite_log on |off;

  • 是否開啟重寫日志

4.if (condition) {...}

  • 引入一個新的配置上下文:條件滿足是,執(zhí)行配置塊中的配置指令菊卷;
  • 可用于server和location段中

condition:
比較操作符:
==
缔恳!=
~:模式匹配,區(qū)分字符大小寫
~:模式匹配洁闰,區(qū)分字符大小寫
歉甚!~:模式不匹配,區(qū)分字符大小寫
扑眉!~:模式不匹配纸泄,不區(qū)分字符大小寫
文件及目錄存在性判斷:
-e, !-e
-f, !-f
-d, !-d
-x, !-x

5.set $variable value

  • 用戶自定義變量
簡單示例:
#重新編輯配置文件vhost.conf
[root@www1 conf.d]# vim vhost.conf

      server {
      listen 80;
      server_name www.ilinux.com;
      root /data/nginx/vhost1;
      rewrite /(.*)\.png$ /$1.jpg;
      }
  [root@www1 conf.d]# nginx -s reload

訪問測試.png能否重寫為.jpg
十三. ngx_http_referer_module模塊
  • The ngx_http_referer_module module is used to block access to a site for requests with invalid values in the “Referer” header field.
    valid_referers none | blocked | server_names | string ...;
    定義referer首部的合法引用用值;
          none:請求報文首部沒有referer首部襟雷;
          blocked:請求報文的referer首部沒有值刃滓;
          server_names:參數(shù),其可以有值作為主機名或主機名模式耸弄;
              arbitrary_string:直接字符串咧虎,但可使用*作通配符;
              regular expression:被指定的正則表達式模式匹配到的字符串计呈;要使用~打頭砰诵,例如 ~.*\.magedu\.com征唬;
              $invalid_referer : 模塊內(nèi)置變量,非法引用茁彭,只要沒被valid_referers定義匹配到的就是非法引用
...
    配置示例:
                valid_referers none block server_names *.magedu.com *.mageedu.com magedu.* mageedu.* ~\.magedu\.;
                
                if($invalid_referer) {
                    return http://www.magedu.com/invalid.jpg;
                }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末总寒,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子理肺,更是在濱河造成了極大的恐慌摄闸,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妹萨,死亡現(xiàn)場離奇詭異年枕,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來允华,“玉大人情臭,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長硝清。 經(jīng)常有香客問我,道長台丛,這世上最難降的妖魔是什么耍缴? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮挽霉,結(jié)果婚禮上防嗡,老公的妹妹穿的比我還像新娘。我一直安慰自己侠坎,他們只是感情好蚁趁,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著实胸,像睡著了一般他嫡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上庐完,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天钢属,我揣著相機與錄音,去河邊找鬼门躯。 笑死淆党,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播染乌,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼山孔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了荷憋?” 一聲冷哼從身側(cè)響起台颠,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎勒庄,沒想到半個月后串前,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡锅铅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年酪呻,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盐须。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖漆腌,靈堂內(nèi)的尸體忽然破棺而出贼邓,到底是詐尸還是另有隱情,我是刑警寧澤闷尿,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布塑径,位于F島的核電站,受9級特大地震影響填具,放射性物質(zhì)發(fā)生泄漏统舀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一劳景、第九天 我趴在偏房一處隱蔽的房頂上張望誉简。 院中可真熱鬧,春花似錦盟广、人聲如沸闷串。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽烹吵。三九已至,卻和暖如春桨武,著一層夾襖步出監(jiān)牢的瞬間肋拔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工呀酸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留凉蜂,地道東北人。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像跃惫,于是被迫代替她去往敵國和親叮叹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容

  • I/O模型Nginx介紹Nginx的安裝和目錄結(jié)構(gòu)Nginx的配置Nginx的編譯安裝 一爆存、I/O模型 (一)I/...
    哈嘍別樣閱讀 895評論 0 4
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理蛉顽,服務發(fā)現(xiàn),斷路器先较,智...
    卡卡羅2017閱讀 134,702評論 18 139
  • 一携冤、安裝Nginx: 1、解決依賴關系 yum groupinstall "Development Tools" ...
    不排版閱讀 863評論 0 0
  • Nginx簡介 解決基于進程模型產(chǎn)生的C10K問題,請求時即使無狀態(tài)連接如web服務都無法達到并發(fā)響應量級一萬的現(xiàn)...
    魏鎮(zhèn)坪閱讀 2,007評論 0 9
  • I/O模型: 阻塞型闲勺、非阻塞型曾棕、復用型、信號驅(qū)動型菜循、異步 同步/異步:關注消息通知機制 消息通知:同步:等待對方返...
    Net夜風閱讀 2,014評論 0 1