nginx作用和部分模块讲解(参考官方文档)

本文深入探讨Nginx的功能特性,包括静态与动态网站架设、反向代理、邮件代理等,详解其模块化设计、高可靠性和热部署优势。重点介绍事件驱动配置、性能优化策略、模块配置细节,以及基于IP和用户的访问控制机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Nginx功能:
静态web服务器
动态网站架设(结合fastCGI或uWSGI )
http反向代理
pop3/imap4代理

Nginx特性:
模块化设计
高可靠性
支持热部署
低内存消耗(10000个keep-alive连接模式下的非活动连接仅需2.5M)
支持event-driven,aio,mmap,sendfile
Web服务的相关功能:
虚拟主机
支持keep-alive和管道连接
访问日志(支持基于日志缓冲提高其性能)
Uri rewirte
路径别名
基于ip及用户访问控制
支持速率限制及并发数限制
热升级
Memcached的GET接口

调试和定位问题:

  1. daemon on | off
    是否以守护进程方式允许,默认为on.
  2. Master_process on | off
    是否以master/worker模型运行nginx; 默认为on;
  3. Error_log file [ level ]
    错误日志文件及其级别;出于调试需要,可设定为debug;但debug仅在编译时指定了—with-debug才有效。
    方式:File /path/logfile;
    Stderr:发送到标准错误
    Syslog:server-address[,parameter=values] 发送到syslog memory:size 内存
    Lever : debug|info|notice|warn|error|crit|alter|emerg

事件驱动相关的配置:
Events {

}

4. worker_connections number
每个worker进程所能打开的最大并发连接数量,如10240,
nginx总并发数为worker进程*最大并发连接数。
5. use method
指明并发连接请求的处理方法,默认自动选择最优方法。
use epoll;
6.accept_mutex on | off
处理新的连接请求方法,on指由各个worker处理新请求,off 每个新请求都会唤醒所有worker,但最后只有一个进行处理,会造成惊群,影响性能。

性能优化相关的配置:
7. worker_processes number | auto
worker数量:通常应该为cpu的物理核心数
8. worker_cpu_affinity auto [ cpumask ]
提高缓存命中率(cpu绑定)
CPU MASK :
00000001 : 0号cpu
00000010: 1号cpu
00000100: 2号cpu
10000000:8号cpu
例如:worker_cpu_affinity 0001 0010;
9. worker_priority number :
指定worker进程nice值,设定worker进程优先级范围 [ -20 ~ 19 ]
10. worker_rlimit_nofile number
worker进程所能打开的文件数量。如65535

**Nginx模块

Nginx_http_core_module(核心)**

1.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 接收缓冲区大小
Sndbuf=size 发送缓冲区大小

  1. server_name name …;
    虚拟主机的主机名称后可跟由多个空白字符分隔的字符串
    **支持通配任意长度任意字符
    支持~起始的字符做正则模式匹配,性能原因慎用 \d表示[ 0-9 ]
    例如:server_name ~^www\d+.magedu.com$
    匹配优先级从高到低:

(1) 字符串精确匹配
(2) 左侧*通配符
(3) 右侧*通配符
(4) 正则表达式
(5) default_server
3. tcp_nodelay on | off
在keepalived模式下的连接是否启用tcp_nodelay选项
在off时,延迟发送,合并多个请求后再发送
在on时,不延迟发送
4. server_tokens on | off | build | string
是否在响应报文的server首部显示nginx版本。

  1. location [ = | ~ | ~* | ^~ ] uri {… }

=对uri做精确匹配
Location =/ {
}
http;//www.yang.com 匹配
http://www.yang.com/index.html 不匹配
^~:对url最左边部分做匹配检查,不区分大小写。
~对uri做正则表达式模式匹配,区分字符大小写
~对URI做正则表达式模式匹配,不区分字符大小写
不带符号:匹配起始于此URI的所有URI
匹配优先级从高到低
=,^,/,~
不带符号

location @name {…}
在一个server中location 配置段可存在多个,用于实现uri 到文件系统的路径映射,nginx会根据用户请求的uri来检查所有的location,并找出一个最佳匹配。而后应用其配置
示例:
server {
server_name www.yang.com
location /path/ {
root /data/path/;
}
}
http://www.yang.com/index.html ----> /data/path/index.html
5.alias path;
路径别名,文档映射的另一种机制;仅能用于location
例如 :
http://www.yang.com/bbs/index.php
location /bbs/ {
alias /web/forum;
}
–> /web/forum/index.html
locaton /bbs/ {
root /web/forum;
}
–> /web/forum/bbs/index.html
root: 给定的路径对应location中的uri左侧的
alias : 给定的路径对应location中的uri右侧的

  1. error_page code … [=[ response] ]
    可用于:http,server,location,if in location
    定义错误页,以指定的响应码进行响应
    location
    error_page 404 /404.html
    error_page 404 =200 /404.html
  2. try_files file … uri;
    Try_files file … =code;
    按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示文件夹),如果所有的文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。如果最后一个参数可以引起一个内部重定向,之前的参数只设置内部uri的指向,最后一个参数是回退uri且必须存在,否则会出现内部500错误
    例如:
    location /images/ {
    try_files $uri /images/default.gif
    }
    location / {
    try_files $uri $uri/index.html $uri.html =404;
    }

定义客户端请求的相关配置
13.keepalive_timeout timeout [ header_timeout ];
设定保存连接超时时长,0表示禁止长连接,默认为75s
14.keepalive_requests number;
在一次长连接上所允许请求的资源最大数量,默认为100.
15.keepalive_disable none | browser
对哪种浏览器禁用长连接。
16.send_timeout time;
向客户端发送响应报文的超时时长,此处是指两次写操作的间隔时长,而非整个响应过程的传输时长。
17.client_body_buffer_size size;
用于接收每个客户端请求报文的body部分的缓冲区大小;默认为16k;超出此大小时,将被暂存到磁盘上由下面指定所定义的位置。
18.client_body_temp_path path [ level1 [ level2 [ level3 ] ] ];
设定存储客户端请求报文的body部分的临时储存路径及子目录结构和数量,目录名为16进制的数字;
例如:
client_body_temp_path /var/tmp/client_body 1 2 2
1 1级目录占1位16进制,即2^4=16个目录0-f
2 2级目录占2位16进制,即2^8=256个目录00-ff
2 3级目录占3位16进制,即2^8=256个目录00-ff

对客户端进行限制的相关配置
19. limit_rate rate;
限制响应给客户端的传输速率,单位是bytes/second(字节/秒)默认值0为无限制
20. limit_except method … { … } ,
仅用于location,限制客户端除了指定的请求方法之外的其他方法
Method: GET,HEAD,POST,PUT,DELETE,MKCOL,COPY,MOVE,OPTIONS,PROPFIND,PROPPATCH,LOCK,UNLOCK,PATCH
例如;
limit_except GET {
allow 192.168.1.0/24;
deny all;
}
除了GET和HEAD之外其他方法仅允许192.168.1.0/24 网段访问(GET包括 HEAD)

文件操作优化的配置
22. aio on | off
是否启动aio功能
22.direction size | off
当文件大小 大于或等于 size时,同步写磁盘,而非写缓存。
23,open_file_cache off;
open_fie_cache max=N [ inactive=time ];
Nginx可以缓存以下三种数据:
(1) 文件元数据:文件的描述符,文件大小和最近一次的修改时间
(2) 打开的目录结构
(3) 没有找到的或没有访问的文件的相关信息
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

Nginx_http_access_module
实现基于ip的访问控制,可用于http,server,location,limit_except语句块
24. allow address | CIDR | unix; | all;
25. deny address | CIDR | unix: | all;
自上而下匹配,一旦匹配,将生效。条件严格置于前
示例:location / {
Deny 192.168.1.1;
Allow 2001:0b8::/32
Deny all;
}

Nginx_http_auth_basic_module
实现基于用户的访问控制,使用basic机制进行用户认证
26. auth_basic string | off;
27. auth_basic_user_file file;
location /admin {
auth_basic “admin area”
auth_basic_user_file /etc/nginx/.ngxpassword;
}
用户口令文件:
明文文本:格式name:password:comment
加密文本:由htpasswd命令实现,由httpd-tools提供

Nginx_http_stub_status_module
用于输出nginx的基本状态信息。

Active connections :当前状态,活动状态的连接数
Accepts:统计总值,已经接受的客户端请求的总数
Handled:统计总值,已经处理完成的客户端请求的总数
Requests:统计总值,客户端发来的总的请求数。
Reading:当前状态,正在读取客户端请求报文首部的连接的连接数
Writing:当前状态,正在向客户端发送响应报文过程中的连接数
Waiting:当前状态,正在等待客户端发出请求的空闲连接数
例如:
location / status {
stub_status;
allow 192.168.64.0/24;
deny all;
}

Nginx_http_index_module

Index file;
指定索引文件。

Nginx_http_log_module
指定日志格式记录请求

  1. log_format name string …;
    string 可以使用nginx核心模块和其他模块内嵌的变量
  2. access_log path [ format [ buffer = size ] [ gzip [ = level ] ] [ flush =time ] [ if=condition ] ];
    access_log off;
    访问日志文件路径,格式,及相关缓存的配置
    Buffer=size
    Flush=time
  3. open_log_file_cache max=N [ inactive=time] [ min_uses=N] [ valid=time ]
    open_log_file_cache off;
    缓存各日志文件相关的元数据信息
    Max : 缓存的最大文件描述符数量
    Min_uses : 在inactive指定的时长内访问大于等于此值可被当作活动项
    Inactive : 非活动时长
    Valid :验证缓存中各缓存项是否为活动项的时间间隔。

Nginx_http_gzip_module

用gzip方法压缩响应数据,节约带宽

  1. gzip on | off
  2. gzip_comp_level level;
    压缩比 1~9 默认为1
  3. gzip_disable regex …;
    匹配到的客户端浏览器不压缩
  4. gzip_min_length length;
    启用压缩功能的响应报文大小阙值
  5. gzip_http_version 1.0 | 1.1
    启用压缩时,协议的最小版本,默认为1.1
  6. gzip_buffers number size
    支持实现压缩功能时缓冲区数量及每个缓冲区大小 默认 32 4k 或 16 8k
  7. gizp_types mime-type …
    指明对哪些类型的资源进行压缩,默认包含text/html,不用指定,否则出错
  8. gzip_vary on | off;
    如果启用压缩,是否在响应报文头部插入“vary: accept-encoding”
  9. gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any …;
    nginx充当代理服务器时,对于后端服务器的响应报文,在任何条件下启用压缩功能,
    off 不启用压缩
    expired ,no-chche,no-store,private :对后端服务器的响应报文首部chche-control值任何一个,启用压缩功能
    例如 :
    Gzip on;
    Gzip_comp_level 6;
    Gzip_min_length 64;
    Gzip_proxied any;
    Gzip_types text/xml text/css application/javascript;

Nginx_http_ssl_module
10. ssl on | off
为指定虚拟主机启用https protocol,建议用listen指令代替
11. ssl_certificate file;
当前虚拟主机使用pem格式的证书文件
12. ssl_certificte_key file;
当前虚拟主机上与证书匹配的私钥文件
14. ssl_protocols [ sslv2 ] [ sslv3 ] [ tlsv1 ] [ tlsv1.1 ] [ tlsv1.2 ];
支持ssl协议版本,默认为后三个。
16. ssl_session_cache off | none | [ builtin [ :size] ] [ shared:name:size]
none :通知客户端支持ssl session cache ,但实际不支持
builtin [ :size ] 使用openssl内建缓存,为每个worker进程私有
[shared:name:size] :在各个worker之间使用一个共享的缓存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值