阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Nginx的特性与核心类别及配置文件和模块详解

133次阅读
没有评论

共计 9296 个字符,预计需要花费 24 分钟才能阅读完成。

一、简介

Nginx (读作 ”engine X”) 由 Igor Sysoev(俄罗斯) 于 2005 年编写,是一个免费、开源、高性能的 HTTP 服务器和反向代理,也可以作为一个 IMAP/POP3 代理服务器。根据 Netcraft 的 March 2014 Web Server Survey, 现在全世界 23% 的网站使用 Nginx,而 Apache 占 54.68%。Nginx 因为稳定,丰富的功能集,配置简单,资源占用低而闻名世界。

相关阅读

CentOS 6.2 实战部署 Nginx+MySQL+PHP http://www.linuxidc.com/Linux/2013-09/90020.htm

使用 Nginx 搭建 WEB 服务器 http://www.linuxidc.com/Linux/2013-09/89768.htm

搭建基于 Linux6.3+Nginx1.2+PHP5+MySQL5.5 的 Web 服务器全过程 http://www.linuxidc.com/Linux/2013-09/89692.htm

CentOS 6.3 下 Nginx 性能调优 http://www.linuxidc.com/Linux/2013-09/89656.htm

CentOS 6.3 下配置 Nginx 加载 ngx_pagespeed 模块 http://www.linuxidc.com/Linux/2013-09/89657.htm

CentOS 6.4 安装配置 Nginx+Pcre+php-fpm http://www.linuxidc.com/Linux/2013-08/88984.htm

Nginx 搭建视频点播服务器(仿真专业流媒体软件)http://www.linuxidc.com/Linux/2012-08/69151.htm

 

二、Nginx 的特性和基础架构

1、基本功能

实现与服务静态文件(静态资源的 web 服务器),能缓存打开的文件标书费

反向代理服务器,支持缓存、负载均衡、健康状态检测

支持 FastCGI

模块化机制,非 DOS 机制,支持多种过滤器,如 gzip,ssl 和用来完成图形大小调整的图像模块

支持 SSL

2. 扩展功能

基于名称和 IP 做虚拟主机

支持 keepalive

支持平滑配置更新和程序版本升级

定制访问日志,支持使用日志缓存以提高性能

支持 URL rewrite

支持路径别名

支持基于 IP 和用户的认证

支持速率限制,并发数限制等

3.nginx 的基本架构

一个 master,生成一个或多个 worker

事件驱动:kqueue,epoll,/dev/poll

消息通知:select poll rt rignals

支持 sendfile,sendfile64

支持 mmap

三、nginx 的配置文件详解

配置参数需要以分号结尾,语法格式如下

参数名  值 1 [值 2 ….];

配置参数中还支持使用变量

支持使用模块内置变量

用户自定义变量:set var_name value

Nginx 基本核心配置的类别

用于调试、定位问题

正常运行的必备配置

优化性能的配置

事件类的配置

1. 正常运行的必备配置

①、user username [groupname]

以那个用户身份运行,可以在配置文件中指定,如果没有指定则以编译时的用户为运行用户

②、pid /path/to/pidfile_name

指定 nginx 的 pid 文件

③、worker_rlimit_nofile #

指定一个 worker 进程所能打开的最大句柄数

④、worker_rlimit_sigpending #

设定每个用户能够发往 worker 进程的信息的数量

2. 优化性能相关的配置

①、worker_procrsses #

worker 进程的个数,通常其数值应该为 cpu 的物理核心数减 1 或 2

②、worker_cpu_affinity cpumask …..

用来绑定 cpu 的,比如

worker_processes    4;

                worker_cpu_affinity 0001 0010 0100 1000;

            ③、ssl_engine device

在存在 ssl 硬件加速器的服务器上,指定所使用的 ssl 硬件加速设备

④、timer_resolution t

每次内核事件调用返回时,都会使用 gettimeday()来更新 nginx 缓存时钟,timer_resloution 用来定义每隔多久才会由 gettimeday()更新一次缓存时钟,x86-64 系统上,gettimeday()代价已经很小,可以忽略此配置

⑤、worker_priority nice

-20 到 19 之间的整数值,数值越小越优先被调用

3. 跟事件相关的配置

①、accept_mutex on|off

是否打开 nginx 的负载均衡锁,此锁能够让多个 worker 轮流地、序列化的与新的客户端请求建立连接;而通常当一个 worker 进程的负载达到其上限的 7 /8,master 就尽可能不将请求掉地至此 worker

②、lock_file /path/to/lock_file

锁文件的位置

③、accept_mutex_delay #ms

使用 accept 锁以后,只有一个 worker 能取得锁,一个 worker 进程为取得 accept 锁的等待市场,即用户建立等待的时间,如果某 worker 进程在某次试图取得锁时失败了,则至少要等 #ms 才能再一次请求锁

④、multi_accept on|off

是否允许一次性地响应多个用户请求,默认为 off

⑤、use [epoll|rtsig|select|poll]

指定使用的模型,建议让 nginx 自动选择

⑥、worker_commections #

每个 worker 能够并发响应的最大请求数,如果为代理服务器的话,worker_rlimit_nofile=worker_commections*2

4. 用于调试、定位问题:只在调试 nginx 时使用

①、daemon [on|off]

关闭提供守护进程的模式,是否让 nignx 运行于后台;调试时应该为 off,使得所有信息直接输出在控制台上,默认为 on

②、master_process on|off

是否已 master/worker 模式运行 nginx,默认为 on,调试时可以设置为 off 以方便追踪

③、error_log /path/to/error_log level

错误日志文件及其级别,调试时可以使用 debug 级别,但要求在编译时必须使用 –with-debug 启用 debug 功能,通常默认为 error 级别

四、nginx 的 http web 功能

必须使用虚拟主机来配置站点,每个虚拟主机使用一个 server{} 段来定义,非虚拟主机的配置和公共选项,需要定义在 server 之外,http 之内

1.server{}

定义一个虚拟主机:nginx 支持使用基于主机名或 ip 的虚拟主机

2.listen

liseten address [:port]

liseten prot

listen  unix:socket

default_server: 定义此 server 为 http 的默认的 server,如果所有的 server 中任意没有任何一个使用此参数,那么第一个 server 为默认 server

rcvbuf=SIZE:接收缓冲大小

sndbuf=SIZE:发送缓冲大小

3.server_name […]

server_name 可以跟多个主机名,名称可以使用通配符和正则表达式(通常以~ 开头):当 nginx 收到一个请求时,会取出去首部的 server 的值,而后跟众 server_name 进行比较:比较方式

(1)先做精确匹配

(2)左侧通配符匹配

(3)右侧通配符匹配

(4)正则表达式匹配

4.server_name_hash_bucket_size 32|64|128

为了实现快速主机查找,nginx 使用 hash 表来保存主机名

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

location @name {…}

功能:允许根据用户请求的 URI 来匹配指定的各 location 以进行访问匹配;匹配到时,将被 location 块中的配置所处理

== 精确匹配

~:正则表达式模式匹配,匹配时区分字符大小写

~*:正则表达式模式匹配,匹配时忽略字符大小写

^~: 只需要前半部分与 uri 匹配即可,不检查正则表达式

匹配优先级:

字符字面量最精确匹配、正则表达式索引(有多个匹配到时,由第一个匹配到的所处理)、安字符字面量

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2014-04/100811p2.htm

五、文件路径定义

1.root path

设置 web 资源路径,用于指定请求的根文档目录,从根开始匹配

root:root/URI

2.alias path

指定路径别名,只能用于 location 中,从最后一个 / 开始匹配

alias: alias/

3. index file ….

定义默认页面,可以跟多个值,自左向右匹配

4.error_page code …[=[response]] URI

当对于某个请求发回错误时,如果匹配上了 error_page 指令中设定的 code,则从定向至新的 URI 中

错误重定向

5.try_files path1 [path2 …] URI

自左向右尝试读取所有 path 所指定路径,在第一个找到即停止并返回,如果 path 均不存在,则返回最后一个 URI

location ~* ^/document/(.*)${

root /www/htdocs

try_files $uri /docu/$1 /temp.html

}

http://www.linuxidc.com/documents/a.html

http://www.linuxidc.com/docu/a.html

http://www.linuxidc.com/temp.html

六、网络连接相关的设置

1.keepalive_timeout time

保持连接的超时时长,默认为 75s

2.keepalive_requests n

在一次长连接上允许承载的最大请求数

3.keepalive_disable [msie6|asfari|none]

对指定的浏览器禁止使用长连接

4.tcp_nodelay on|off

对 keepalive 连接是否使用 tcp_nodelay 选项

5.client_header_timeout time

读取 http 请求首部的超时时长

6.client_body_timeout time

请求 http 请求包体的超时时长

7.save_timeout time

发送响应的超时时长

七、对客户端请求的限制

1.limit_except method … {…}

指定范围之外的其他的访问控制,只能用于 location 中

2.client_max_body_size SIZE

http 请求包体的最大值,常用于限定客户端所能够请求的最大包体,根据请求首部中的 Content-Length 来检查,以避免无用的传输

3.limit_rate speed

限制客户端每秒传输的字节数,默认为 0,表示没有限制

4.limit_rate_after time

nginx 向客户端发送响应报文时,如果时长超过了此处指定的时长,则后续的发送过程开始限速

八、文件操作的优化

1.aendfile on|off

是否启用 sendfile 功能

2.aio on|off

是否启用 aio 功能

3.open_file_cache max=N [incative=time]|off

是否打开文件缓存功能

max:用于缓存条目的最大值,允许打开的缓存条目最大数,当满两类以后将根据 LRU(最小最少连接数)算法进行置换

inactive:某缓存条目在指定时长内没有被访问过时,将自动被删除,通常默认为 60s

缓存的信息包括

文件句柄、文件大小和上次修改的时间

已经打开的目录结构

没有找到或没有访问权限的信息

4.open_file_cache_errors on|off

是否缓存文件找不到或者没有权限访问等信息

5.open_file_cache_min_use #

在 inactive 指定的时长内被访问超过此处指定的次数时,不会被删除

6.open_file_cache_valid time

多长时间检查一次缓存中的额条目是否超出非活动时长,默认为 60s

九、对客户端请求的特殊处理

1.ignore_invalid_headers on|off

是否忽略不合法的 http 首部,默认为 on,off 意味着请求首部中出现不合规的首部将拒绝响应,只能用于 server 和 http 中,建议改为 off

2.log_not_found on|off

用户访问的文件不存在时,是否将其记录到错误日志中

3.resolver address

指定 nginx 使用的 dns 服务器地址

4.resolver timeout

指定 DNS 解析超时时长,默认为 30s

5.server_tokens on|off

是否在错误页面中显示 nginx 的版本号

十、http 核心模块的内置变量

1.$uri: 当前请求的 uri,不带参数

2.$request_uri: 请求的 uri,带完整参数

3.$host:http 请求报文中 host 首部,如果请求中没有 host 首部,则以处理此请求的主机的著名代替

4.$hostname:nginx 服务运行所在主机的主机名

5.$remote_addr:客户端 ip

6.$remote_port:客户端 port

7.$remote_user: 使用用户认证时客户端用户输入的用户名

8.$request_filename: 用户请求中的 URI 经过本地 root 或 alias 转换后映射的本地的文件路径

9.$request_method:请求方法

10.$server_addr:服务器地址

11.$server_name: 服务器名称

12.$server_port: 服务器端口

13.$server_protocol: 服务器想客户端发送响应时的协议,如 http/1.1 http/1.0

14.$scheme: 在请求中使用的 scheme 映射协议本身的协议

15.$http_HEADER: 匹配请求报文中指定的 HEADER  例如:$http_host 匹配请求报文中的 host 首部

16.$sent_http_HEADER: 响应报文中指定的 HERADER,例如:$http_content_type 匹配相应报文中的 content-type 首部

17.$document_root:当前请求映射到的 root 配置

Nginx 的详细介绍 :请点这里
Nginx 的下载地址 :请点这里

一、简介

Nginx (读作 ”engine X”) 由 Igor Sysoev(俄罗斯) 于 2005 年编写,是一个免费、开源、高性能的 HTTP 服务器和反向代理,也可以作为一个 IMAP/POP3 代理服务器。根据 Netcraft 的 March 2014 Web Server Survey, 现在全世界 23% 的网站使用 Nginx,而 Apache 占 54.68%。Nginx 因为稳定,丰富的功能集,配置简单,资源占用低而闻名世界。

相关阅读

CentOS 6.2 实战部署 Nginx+MySQL+PHP http://www.linuxidc.com/Linux/2013-09/90020.htm

使用 Nginx 搭建 WEB 服务器 http://www.linuxidc.com/Linux/2013-09/89768.htm

搭建基于 Linux6.3+Nginx1.2+PHP5+MySQL5.5 的 Web 服务器全过程 http://www.linuxidc.com/Linux/2013-09/89692.htm

CentOS 6.3 下 Nginx 性能调优 http://www.linuxidc.com/Linux/2013-09/89656.htm

CentOS 6.3 下配置 Nginx 加载 ngx_pagespeed 模块 http://www.linuxidc.com/Linux/2013-09/89657.htm

CentOS 6.4 安装配置 Nginx+Pcre+php-fpm http://www.linuxidc.com/Linux/2013-08/88984.htm

Nginx 搭建视频点播服务器(仿真专业流媒体软件)http://www.linuxidc.com/Linux/2012-08/69151.htm

 

二、Nginx 的特性和基础架构

1、基本功能

实现与服务静态文件(静态资源的 web 服务器),能缓存打开的文件标书费

反向代理服务器,支持缓存、负载均衡、健康状态检测

支持 FastCGI

模块化机制,非 DOS 机制,支持多种过滤器,如 gzip,ssl 和用来完成图形大小调整的图像模块

支持 SSL

2. 扩展功能

基于名称和 IP 做虚拟主机

支持 keepalive

支持平滑配置更新和程序版本升级

定制访问日志,支持使用日志缓存以提高性能

支持 URL rewrite

支持路径别名

支持基于 IP 和用户的认证

支持速率限制,并发数限制等

3.nginx 的基本架构

一个 master,生成一个或多个 worker

事件驱动:kqueue,epoll,/dev/poll

消息通知:select poll rt rignals

支持 sendfile,sendfile64

支持 mmap

三、nginx 的配置文件详解

配置参数需要以分号结尾,语法格式如下

参数名  值 1 [值 2 ….];

配置参数中还支持使用变量

支持使用模块内置变量

用户自定义变量:set var_name value

Nginx 基本核心配置的类别

用于调试、定位问题

正常运行的必备配置

优化性能的配置

事件类的配置

1. 正常运行的必备配置

①、user username [groupname]

以那个用户身份运行,可以在配置文件中指定,如果没有指定则以编译时的用户为运行用户

②、pid /path/to/pidfile_name

指定 nginx 的 pid 文件

③、worker_rlimit_nofile #

指定一个 worker 进程所能打开的最大句柄数

④、worker_rlimit_sigpending #

设定每个用户能够发往 worker 进程的信息的数量

2. 优化性能相关的配置

①、worker_procrsses #

worker 进程的个数,通常其数值应该为 cpu 的物理核心数减 1 或 2

②、worker_cpu_affinity cpumask …..

用来绑定 cpu 的,比如

worker_processes    4;

                worker_cpu_affinity 0001 0010 0100 1000;

            ③、ssl_engine device

在存在 ssl 硬件加速器的服务器上,指定所使用的 ssl 硬件加速设备

④、timer_resolution t

每次内核事件调用返回时,都会使用 gettimeday()来更新 nginx 缓存时钟,timer_resloution 用来定义每隔多久才会由 gettimeday()更新一次缓存时钟,x86-64 系统上,gettimeday()代价已经很小,可以忽略此配置

⑤、worker_priority nice

-20 到 19 之间的整数值,数值越小越优先被调用

3. 跟事件相关的配置

①、accept_mutex on|off

是否打开 nginx 的负载均衡锁,此锁能够让多个 worker 轮流地、序列化的与新的客户端请求建立连接;而通常当一个 worker 进程的负载达到其上限的 7 /8,master 就尽可能不将请求掉地至此 worker

②、lock_file /path/to/lock_file

锁文件的位置

③、accept_mutex_delay #ms

使用 accept 锁以后,只有一个 worker 能取得锁,一个 worker 进程为取得 accept 锁的等待市场,即用户建立等待的时间,如果某 worker 进程在某次试图取得锁时失败了,则至少要等 #ms 才能再一次请求锁

④、multi_accept on|off

是否允许一次性地响应多个用户请求,默认为 off

⑤、use [epoll|rtsig|select|poll]

指定使用的模型,建议让 nginx 自动选择

⑥、worker_commections #

每个 worker 能够并发响应的最大请求数,如果为代理服务器的话,worker_rlimit_nofile=worker_commections*2

4. 用于调试、定位问题:只在调试 nginx 时使用

①、daemon [on|off]

关闭提供守护进程的模式,是否让 nignx 运行于后台;调试时应该为 off,使得所有信息直接输出在控制台上,默认为 on

②、master_process on|off

是否已 master/worker 模式运行 nginx,默认为 on,调试时可以设置为 off 以方便追踪

③、error_log /path/to/error_log level

错误日志文件及其级别,调试时可以使用 debug 级别,但要求在编译时必须使用 –with-debug 启用 debug 功能,通常默认为 error 级别

四、nginx 的 http web 功能

必须使用虚拟主机来配置站点,每个虚拟主机使用一个 server{} 段来定义,非虚拟主机的配置和公共选项,需要定义在 server 之外,http 之内

1.server{}

定义一个虚拟主机:nginx 支持使用基于主机名或 ip 的虚拟主机

2.listen

liseten address [:port]

liseten prot

listen  unix:socket

default_server: 定义此 server 为 http 的默认的 server,如果所有的 server 中任意没有任何一个使用此参数,那么第一个 server 为默认 server

rcvbuf=SIZE:接收缓冲大小

sndbuf=SIZE:发送缓冲大小

3.server_name […]

server_name 可以跟多个主机名,名称可以使用通配符和正则表达式(通常以~ 开头):当 nginx 收到一个请求时,会取出去首部的 server 的值,而后跟众 server_name 进行比较:比较方式

(1)先做精确匹配

(2)左侧通配符匹配

(3)右侧通配符匹配

(4)正则表达式匹配

4.server_name_hash_bucket_size 32|64|128

为了实现快速主机查找,nginx 使用 hash 表来保存主机名

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

location @name {…}

功能:允许根据用户请求的 URI 来匹配指定的各 location 以进行访问匹配;匹配到时,将被 location 块中的配置所处理

== 精确匹配

~:正则表达式模式匹配,匹配时区分字符大小写

~*:正则表达式模式匹配,匹配时忽略字符大小写

^~: 只需要前半部分与 uri 匹配即可,不检查正则表达式

匹配优先级:

字符字面量最精确匹配、正则表达式索引(有多个匹配到时,由第一个匹配到的所处理)、安字符字面量

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2014-04/100811p2.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计9296字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中