Nginx高性能Web服务器详解

一、Nginx初探

二、Nginx服务器的安装部署

1.配置文件包含:全局块、events块、http块、server块、location块

2.user user [group]; 指定用户及用户组

3.work_processes number | auto; 指定进程数

4.pid file; 配置pid存放路径,必须指定路径和文件名

5.error_log file | stderr [debug | info | notice | warn | error | crit | alert | emerg]; 配置错误日志的存放路径,文件需要对于nginx进程运行的用户具有写权限,可在全局块、http块、server块以及location块中配置

6.include file; 引入配置文件,需要定权限

7.appept_mutex on | off; 对多个nginx进程接收连接进行序列化,防止多个进程对链接的争抢,默认为on

8.multi_accept on | off; 允许worker process同时接收多个网络连接,默认off

9.user method[select | poll | kqueue | epoll | rtsig | /dev/poll | eventport],配置nginx服务器选择哪种事件驱动模型进行消息处理

10.worker_connections number; 设置允许每个worker process同时开启的最大连接数

11.include mime.types; 指定mime配置文件

12.default_type mime-type; 指定默认的mime类型,默认为text/plain

13.access_log path [format [buffer=size]]; 服务日志记录配置,指定off为关闭

14.log_format name string ...; 定义服务日志的格式,可以为格式字符串定义一个名称,以便access_log直接使用,默认为combined

15.sendfile on | off; 开启或关闭sendfile()传输文件

16.sendfile_max_chunk size; sendfile的大小限制,0为无限制

17.keepalive_timeout timout [header_timeout]; 连接超时时间

18.keepalive_requests number; 限制用户通过某一连接向nginx服务器发送请求的次数

19.监听:

  • listen address[:port] [default_server] [setfib=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [deferred] [accept_filter=filter] [bind] [ssl];
  • listen port [default_server] [setfib=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [deferred] [accept_filter=filter] [bind] [ssl];
  • listen unix:path [default_server] [setfib=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [deferred] [accept_filter=filter] [bind] [ssl];
  • address:ip地址,ipv6需要[]括起来
  • port:端口号
  • path:socket文件路径
  • default_server:标识符
  • setfib=number:监听socket关联路由表,只对FreeBSD起作用,不常用
  • backlog=number:监听函数listen()最多允许多少网络连接同时处于挂起状态,FreeBSD为-1,其他为511
  • rcvbuf=size:监听socket接收缓存区大小
  • sndbuf=size:监听socket发送缓存区大小
  • deferred,标识符,将accept()设置为Deferred模式
  • accept_filter:设置监听端口对请求的过滤,被过滤的内容不能被接收和处理,只在FreeBSD和NetBSD平台下有效
  • bind:标识符,使用独立的bind()处理此address:port
  • ssl:标识符,设置会话连接使用SSL模式进行

20.server_name name ……; 配置虚拟主机,可以使用*和~等正则及正则匹配

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

22.root path; 请求的根目录

23.alias path; 改变location接收到的URI的请求路径

24.error_page code ... [=[response]] uri 网站错误页面

25.allow address | CIDR | all; 设置允许访问nginx的客户端ip;deny address | CIDR | al; 设置禁止访问nginx的客户端ip

26.auth_basic string | off; http认证

三、Nginx服务器架构初探

A.模块化结构

1.模块化设计:以功能块为单位进行程序设计,实现其求解算法的方法

2.nginx模块:核心模块、标准HTTP模块、可选HTTP模块、邮件服务模块、第三方模块

B.Nginx服务器的Web请求处理机制

1.Nginx结合多进程机制和异步机制对外提供服务,异步机制使用异步非阻塞方式

C.Nginx服务器的事件驱动模型

1.事件驱动就是在持续事务管理过程中,由当前时间点上出现的事件引发的调动可用资源执行相关任务,解决不断出现的问题,防止事务堆积的一种策略,一般是由事件收集器、事件发送器、事件处理器组成

2.事件驱动处理库常见包括:select模型、poll模型有epoll模型

3.kqueue模型在FreeBSD、OpenBSD、NetBSD以及Mac OS平台上更好

D.设计架构概览

1.Nginx服务器启动后,产生一个主进程(master process),主进程执行一系列工作后产生一个或者多个工作进程

2.主进程主要进行Nginx配置文件解析、数据结构初始化、模块配置和注册、信号处理、网络监听生成、工作进程生成和管理等工作

3.工作进程主要进行进程初始化、模块调用和请求处理等工作,是Nginx服务器提供服务的主体

4.Nginx服务器的进程:主进程、工作进程、缓存索引重建及管理进程

5.进程交互涉及主进程与工作进程交互和工作进程间的交互,依赖于管道(channel)机制,交互的准备工作都是在工作进程生成时完成的

6.Run Loops,指的是进程内部用来不停地调配工作,对事件进行循环处理的一种模型,Nginx用此来处理客户端发来的请求事件

四、Nginx服务器的高级配置

A.针对IPv4的内核7个参数的配置优化

1.net.core.netdev_max_backlog:表示当每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包的量大数目

2.net.core.somaxconn:用于调节系统同时发起的TCP连接数

3.net.ipv4.tcp_max_orphans:设定系统中最多允许存在多少TCP套接字不被关联到任何一个用户文件句柄上

4.net.ipv4.tcp_max_syn_backlog:记录尚未收到客户端确认信息的连接请求的最大值

5.net.ipv4.tcp_timestamps:设置时间戳,可以避免序列号的卷绕,建议关闭

6.net.ipv4.tcp_synack_retries:设置内核放弃TCP连接之前向客户端发磅SYN+ACK包的数量

7.net.ipv4.tcp_syn_retries:设置内核放弃建立连接之前发送SYN包的数量

B.针对CPU的Nginx配置优化的2个指令

1.worker_processes:废黜Nginx服务的进程数,最好赋值为机器CPU的倍数

2.worker_cpu_affinity:为每个进程分配CPU的工作内核

C.与网络连接相关的配置的4个指令

1.keepalive_timeout:设置Nginx服务器与客户端保持连接的超时时间,keepalive_timeout 60(超时时间) 50(消息头保持活动的有效时间);

2.send_timeout:设置Nginx服务器响应客户端的超时时间,仅针对两个客户端和服务器之间建立连接后,某次活动之间的时间

3.client_header_buffer_size:设置Nginx服务器允许的客户端请求头部的缓冲区大小,默认1KB,可解决大部分400错误

4.multi_accept:配置Nginx服务器是否尽可能多地接收客户端的网络连接请求,默认off

D.与事件驱动模型相关的配置的8个命令

1.use:指定使用的事件驱动模型

2.worker_connections:设置每个工作进程允许同时连接客户端的最大数量

3.worker_rlimit_sigpending:设置Linux2.6.6-mm2版本之后Linux平台的事件信号队列长度上限

4.devpoll_changes和devpoll_events:设置在/dev/poll事件驱动模式下Nginx可以与内核之间传递事件的数量,前者设置传递给内核事件数量,后者设置从内核获取的事件数量

5.kqueue_changes和kqueue_events:设置在kqueue事件驱动模式下Nginx可以与内核之间传递事件的数量,前者设置传递给内核事件数量,后者设置从内核获取的事件数量

6.epoll_events:设置在epoll事件驱动模式下Nginx可以与内核之间传递事件的数量

7.rtsig_signo:设置rtsig模式使用的两个信号中的第一个,第二个信号是在第一个信号的编号上加1

8.rtsig_overflow_*:用来控制当rtsig模式中信号队列溢出时Nginx服务器的处理方式

  • rtsig_overflow_events:指定队列溢出时使用poll库处理的事件数
  • rtsig_overflow_test:指定poll库处理完第几件事件后将清空rtsig模型使用的信号队列
  • rtsig_overflow_threshold:指定rtsig模式使用的信号队列中的事件超过多少时就需要清空队列了

五、Nginx服务器的Gzip压缩

A.由ngx_http_gzip_module模块处理的9个指令

1.gzip on | off; :开启或关闭Gzip功能

2.gzip_buffers number size:设置Gzip压缩文件使用缓存空间的大小

3.gzip_comp_level level:设定Gzip压缩程度,从1到9,1效率高压缩低,9压缩高效率低

4.gzip_disable regex ....;:根据不同种类的客户端选择性地开启关闭Gzip功能

5.gzip_http_version 1.0|1.1;:设置开启Gzip功能的最低HTTP协议版本

6.gzip_min_length length;:根据响应页面的大小,选择性地开启或者关闭Gzip功能

7.gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;:在使用反射代理功能时有用,后端服务器返回的响应页善中,Requests部分包含用于通知代理服务器的Via头域,主要用于设置是否对后端服务器返回的结果进行Gzip压缩

8.gzip_types mime-type ...;:根据响应页的MIME类型选择性地开启Gzip

9.gzip_vary on | off;:设置在使用Gzip功能时是否发送带有“Vary: Accept-Encoding”头域的响应头部

B.由ngx_http_gzip_static_module模块处理的指令

1.该模块使用静态压缩,适用于可确定响应数据长度的情况;ngx_http_gzip_module使用Chunked编码的动态压缩,适用于无法确定响应数据长度的情况,比如大文件下载等

2.gzip_static on | off | always;:开启和关闭该模块的功能

C.由ngx_http_gunzip_module模块处理的2个命令

1.用来针对不支持Gzip压缩数据处理的客户端浏览器,对压缩数据进行解压处理的

2.gunzip on | off;:开启或者关闭该模块的功能

3.gunzip_buffers number size;:与ngx_http_gzip_module的gzip_buffers类似,用于设置Nginx解压Gzip文件使用缓存空间的大小

D.常见问题

1.gzip_disable "msie[1-6]":指定不启用gzip的浏览器

2.多层服务器的情况下,后端服务器不要开启Gzip压缩

六、Nginx服务器的Rewrite功能

A.Nginx后端服务器组的配置的5个指令

1.upstream name (...);:设置后端服务器组的主要指令,某个服务器组接收到请求以后,按照轮叫调度(Round-Robin,RR)策略顺序选择组内服务器处理请求

2.server address [parameters];:设置组内的服务器,parameters(weight=number,max_fails=number,fail_timeout=time,backup,down)

3.ip_hash:实现会话保持功能,将某个客户端的多次请求定向到组内同一台服务器上,保证客户端与服务器之间建立稳定的会话

4.keepalive conections;:控制网络连接保持功能,保证工作进程为服务器组打开一部分网络连接,并且将数量控制在一定的范围之内

5.least_conn:用于配置使用负载均衡策略为网络连接分配服务器组内的服务器

B.Rewrite功能的配置

1.依赖于PCRE的支持

2.地址重写与转发:

  • 地址转发后客户端浏览器地址栏中的地址显示是不改变的;而地址重写后客户端浏览器地址栏中的地址改变为服务器选择确定的址
  • 地址转发只产生一次网络请求;地址重写一般产生两次请求
  • 地址转发一般发生在同一站点项目内;地址重写没有该限制
  • 地址转发到的页面可以不用全路径名表示,地址重写到的页面必须使用完整的路径名表示
  • 地址转发过程中,可以交过往民端请求的request范围内属性传递给新的页面,但地址重写不可以
  • 地址转发的速度较地址重定向快

3.if (condition) {...}:支持条件判断,根据条件判断结果选择不同的Nginx配置,可以在server块或location块中配置

  • =和!=比较变量和字符串,字符串不用加引号
  • ~表示对大小写敏感;~*表示大小写不敏感;!~和!~*匹配失败时if指令认为条件为true,否则为false
  • -f和!-f判断文件请求的文件是否存在
  • -d和!-d判断请求的目录是否存在
  • -e和!-e判断请求的目录或者文件是否存在
  • -x和!-x判断请求的文件是否可执行

4.break,用于中断当前相同作用域中的其他Nginx配置;return [text | code | URL | code URL],用于完成对请求的处理,直接向客户端返回响应状态代码

5.rewrite regex replacement [flag]:通过正则表达式的使用来改变URI

  • rewrite接收到的URI不包含host地址,也不包含请求的指令(?后面的内容,需要使用全局变量$request_uri,要在$request_uri后添加?号)
  • flag:last,终止继续在本location块中处理接收到的URI,并将此处重写的URI作为一个新的URI,使用各location块进行处理;break,将此处重写的URI作为 一个新的URI,在本块中继续进行处理;redirect,将重写生的URI返回给客户端,状态码为302,指临时重定向;permanent,将重写生的URI返回给客户端,状态码为301,永久重定向

6.rewrite_log on | off;:配置是否开启URL重写日志的输出功能

7.set variable value;:设置一个新的变量

8.uninitialized_variable_warn on | off;:配置使用未初始化的变量时,是否记录警告日志

9.常用全局变量:$args,请求指令;$content_length;$content_type;$document_root针对当前请求的根路径;$document_uri不包括请求指令的URI;$host请求URL中的主机部分字段;$http_user_agent;$http_cookie;$limit_rate;$remote_addr;$remote_port;$remote_user;$request_body_file;$request_method;$request_filename;$request_uri,带请求指令的URI;$query_string与$args相同;$scheme使用的协议;$server_protocol,请求协议版本;$server_addr;$server_name;$server_port;$uri与$document_uri相同

C.Rewrite的使用

1.域名镜像:是指将一个完全相同的网站分别放置到几个服务器上,并分别使用独立的URL,其中一个服务器上的网站叫做主站,其他为镜像网站

2.valid_referers none | blocked | server_names | string ...;,获取Referer头域中的值,根据值给全局变量$invalid_referer赋值,如果不符合就会被赋为1,如vaild_referers none blocked server_names *.myweb.name;,可以防盗链

七、Nginx服务器的代理服务

A.正向代理与反向代理的概念

1.正向代理服务器用来让局域网客户机接入外网以访问外网资源,反向代理服务器用来让外网的客户端接入局域网中的站点以访问立足点中的资源

B.Nginx服务器的正向代理服务

1.Nginx服务器正向代理服务的配置的3个指令

  • resolver addressip ... [valid=time];:指定DNS服务器的IP地址,将域名映射为对应的IP地址
  • resolver_timeout time;:设置DNS服务器域名解析超时时间
  • proxy_pass URL;:设置代理服务器的协议和地址,不仅仅用于Nginx服务器的代理服务,更主要的是应用于反向代理服务

2.server块中必须有resolver,不能有server_name,不支持HTTPS站点

C.Nginx服务器的反向代理服务

1.反向代理的基本设置的21个指令

  • proxy_pass URL;:设置被代理服务器的地址,可以是主机名称、IP地址加端口号等形式,可以使用upstream指令配置后端服务器组
  • proxy_hide_header field;:设置在发送HTTP响应时,隐藏一些头域信息
  • proxy_pass_header field;:默认在发送响应报文时,报文头中不包含"Date"、"Server"、"X-Accel"等来自被代理服务器的头域信息,该指令可以设置这些头域信息以被发送
  • proxy_pass_request_body on | off;:是否将客户端请求的请求体发送给代理服务器,默认on,可以在http块、server块或者location块配置
  • proxy_pass_request_header on | off;:是否将客户端请求的请求头发送给代理服务器,默认on,可以在http块、server块或者location块配置
  • proxy_set_header field value;:可以更改接收到的客户端请求的请求头信息,然后将新的请求头发给被代理的服务器
  • proxy_set_body value;:可以更改接收到的客户端请求的和请求体信息,然后将新的请求体发送给被代理的服务器
  • proxy_bind address;:强制将与代理主机的连接绑定到指定的IP地址,在配置了多个基于名称或者基于IP的主机的情况下,如果我们希望代理连接由指定的主机处理,就可以使用该指令进行配置
  • proxy_connect_timeout time;:配置Nginx服务器与后端被代理服务器尝试建立连接的超时时间
  • proxy_read_timeout time;:配置Nginx服务器向后端被代理服务器(组)发出read请求后,等待响应的超时时间
  • proxy_send_timeout time;:配置Nginx服务器向后端被代理服务器(组)发出write请求后,等待响应的超时时间
  • proxy_http_version 1.0 | 1.1;:设置用于Nginx服务器提供代理服务的HTTP版本协议
  • proxy_method method;:设置Nginx服务器请求被代理服务器时使用的请求方法,一般为POST或者GET
  • proxy_ignore_client_abort on | off;:设置在客户端中断网络请求时,Nginx服务器是否中断对被代理服务器的请求,默认为off
  • proxy_ignore_headers filed ...;:设置一些HTTP响应头中的头域,接收到被代理服务器的响应数据后,不会处理被设置的头域
  • proxy_redirect redirect replacement;:修改被代理服务器返回的响应头中的Location头域和"Refresh"头域,与proxy_pass指令配合使用,还可指定default或off
  • proxy_intercept_errors on | off;:配置一个状态是开启还是关闭,如果开启时被代理服务器返回的状态代码为400或者大于400,则Nginx服务器使用自己定义的错误页,如果是关闭状态,直接把被代理服务器的HTTP状态返回给客户端
  • proxy_headers_hash_max_size size;:配置存放HTTP报文头的哈希表的容量
  • proxy_headers_hash_bucket_size size;:设置申请存放HTTP报文头的哈希表容量的单位大小
  • proxy_next_upstream status ...;:配置Nginx服务器反向代理功能时,如果使用upstream指令配置了一组服务器作为被代理服务器,服务器组中各服务器的访问规则遵循upstream指令配置的轮询规则,同时可以使用该指令配置在发生哪些异常情况时,将请求顺次交由下一个组内服务器处理,status可以指定errpo,timeout,invalid_header,http500,http_502,http503,http_504,http_404,off
  • proxy_ssl_session_reuse on | off;:配置是否使用基于SSL安全协议的会话链接被代理的服务器

2.Proxy Buffer的配置的7个指令

  • Proxy Buffer启用以后,Nginx服务器会异步地将被代理服务器的响应数据传递给客户端,当关闭时,Nginx服务器只要接收到响应数据就会同步地传递给客户端,它本身不会读取完整的响应数据
  • Nginx服务器首先尽可能地从被代理服务器那里接收响应数据,旋转在Proxy Buffer中,Buffer的大小由proxy_buffer_size和proxy_buffers决定,如果接收的过程中Buffer没有足够的大小来接收一次响应的数据,Nginx服务器会将部分接收到的数据临时存放在磁盘的临时文件中,一次响应数据被接收完成或者Buffer已经装满后,Nginx服务器开始向客户端传输数据
  • 每个Proxy Buffer装满数据后,在从开始向客户端发送一直到Proxy Buffer中的数据全部传输给客户端的整个过程中它都处于BUST状态,期间对它进行的其他操作都会失败
  • proxy_buffering on | off;:启用或关闭Proxy Buffer,默认为启用
  • proxy_buffers number size;:配置接收一次被代理服务器响应数据的Proxy Buffer个数和每个Buffer的大小,number为Proxy Buffer的个数,size为每个Buffer的大小,默认为proxy_buffers 8 4k|8k;
  • proxy_buffer_size size;:用于配置从被代理服务器获取的第一部分响应数据的大小,该数据中一般包含了HTTP响应头,Nginx服务器通过它来获取响应数据和被代理服务器的一些必要信息
  • proxy_busy_buffers_size size;:用于限制同时牌BUSY状态的Proxy Buffer的总大小
  • proxy_temp_path path [level1 [level2 [level3]]];:用于配置磁盘上的一个文件路径,该文件用于临时存放代理服务器的大体积响应数据
  • proxy_max_temp_file_size size;:用于配置所有临时文件的总体积大小,存放在磁盘上的临时文件大小不能超过该配置值,这避免了响应数据过大造成磁盘空间不足的问题
  • proxy_temp_file_write_size size;:用于配置同时写入临时文件的数据量的总大小,合理的设置可以避免磁盘IO负载过重导致系统性能下降的问题

3.Proxy Cache的配置的12个指令

  • Buffer,主要用于传输效率不同步或者优先级别不相同的设备之间传递数据,一般通过对一方数据进行临时存放,再统一发磅的办法传递给另一方,以降低进程之间的等待时间,保证速度较快的进程不发生间断
  • Cache,主要用于将硬盘上已有的数据在内在中建立缓存数据,提高数据的访问效率,对于过期不用的缓存可以随时销毁
  • Proxy Buffer实现了被代理服务器响应数据的异步传输,Proxy Cache则主要Nginx服务器对客户端数据请求的快速响应,Proxy Cache依赖于Proxy Buffer,只有Proxy Buffer开启时才有用
  • proxy_cache zone | off;配置一块公用 的内在区域的名称,该区域可以存放缓存的索引数据,被代理服务器响应HTTP头域中的"Cache-Control"为"no-cache"、"no-store"、"private"、"max-age","Expires"为0时都不会缓存
  • proxy_cache_bypass string ...;:配置向客户端发送响应数据时,不从缓存中获取的条件
  • proxy_cache_key string;:设置Nginx服务器在内在中为缓存数据建立索引时使用的关键字
  • proxy_cache_lock on | off;:设置是否开启缓存的锁功能,默认为off
  • proxy_cache_lock_timeout time;:设置缓存的锁功能开启以后锁的超时时间
  • proxy_cache_min_uses number;:设置客户端请求发送的次数,当客户端向被代理服务器发送相同请求达到该指令设定的次数后,Nginx服务器才对该请求的响应数据做缓存
  • proxy_cache_path path [levels=levels] keys_zone=name:size1 [inactive=time1] [max_size=size2] [loader_files=number] [loader_sleep=time2] [loader_threshold=time3];:设置Nginx服务器存储缓存数据的路径以及和缓存索引相关的内容,path设置缓存数据存放的根路径,levels设置在相对于path指定目录的第几级hash目录中缓存数据,name:size1设置存放缓存索引的内在区域的名称和大小,time1设置强制更新缓存数据的时间,size2设置硬盘中缓存数据的大小限制,number设置缓存索引重建进程每次加载的数据元素的数量上限,time2设置缓存索引重建进程在一次遍历结束,下次遍历开始之间的暂停时长,time3设置遍历一次磁盘缓存源数据的时间上限
  • proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_404 | off ...;:如果Nginx在访问被代理服务器过程中出现被代理服务器无法访问或者访问错误等现象时,Nginx服务器可以使用历史缓存响应客户端的请求
  • proxy_cache_valid [code ...] time;:可以针对不同的HTTP响应状态设置不同的缓存时间
  • proxy_no_cache string ...;:用于配置在什么情况下不使用cache功能
  • proxy_store on | off | string;:配置是否在本地磁盘缓存来自被代理服务器的响应数据,对静态数据的效果比较好
  • proxy_store_access users:permissions ....;:设置用户或用户组对Proxy Store缓存的数据的访问权限

D.Nginx服务器的负载均衡

1.负载均衡是利用一定的分配策略将网络负载平衡地分摊到网络集群的各个操作单元上,使得单个负载任务能够分担到多个单元上并行处理,或者使得大量并发访问或数据流量分担到多个单元上分别处理

2.Nginx实现了的基于优先级的加权轮询算法,主要使用的配置是proxy_pass和upsteam

八、Nginx服务器的缓存机制

A.Web缓存技术简述

1.把不需要实时更新的动态页面输出结果转化成静态网页形成缓存,进而按照静态网页来访问

2.主要在Web服务器和客户端之间实现,Web服务器首先根据客户端的请求从后端服务器获取响应数据,并传回给客户端,同时,Web服务器将该响应数据在本地建立副本保存,当下次有相同的请求时,Web服务器直接使用本地的副本响应访问请求,而不是向后端服务器再次发送请求

3.Nginx主要基于Proxy Store、Memcached、Proxy Cache、Squid、ncache缓存

B.基于memcached的缓存机制的6个指令

1.memcached_pass address;:配置memcached服务器的地址

2.memcached_connect_timeout time;:配置连接memcached服务器的超时时间

3.memcached_read_timeout time;:配置Nginx服务器向memcached服务器发现两次read请求之间的等待超时时间,如果在该时间内没有进行数据传输,连接将会被关闭

4.memcached_send_timeout time;:配置Nginx服务器向memcached服务器发现两次write请求之间的等待超时时间,如果在该时间内没有进行数据传输,连接将会被关闭

5.memcached_buffer_size size;:配置用于接收memcached服务器响应数据的缓存区大小

6.memcached_next_upstream status ...;:配置了一组memcached服务器的情况下的使用,服务器组中各memcached服务器的访问规则遵循upstream指令配置的轮询规则,同时可以使用该指令配置在发生哪些异常情况时,将请求顺次交由下一个组内服务器处理,status可指定error、timeout、invalid_header、not_found、off

九、Nginx服务器的邮件服务

A.Nginx邮件服务的配置的12个指令

1.listen address:prot;:监听的IP地址和端口

2.servr_name name;:用于为每个server块构成的虚拟主机配置的域名

3.protocol imap | pop3 | smtp;:配置当前虚拟主机支持的协议,只能在server块中配置

4.so_keepalive on | off;:配置后端代理服务器是否启用“TCP keepalive“模式来处理Nginx邮件服务器转发的客户端连接

5.pop3_auth method ...;配置POP3认证用户的方式,method支持plain、apop、cram-md5,可以在mail块或server块中配置

6.pop3_capabilities extension ...;:配置POP3协议的扩展功能,可以在mail块或server块中配置

7.imap_auth method ...;:配置认证用户的方式,与pop3_auth类似

8.imap_capabilities extension ...;:配置IMAP协议的扩展功能,与pop3_capabilities类似

9.imap_client_buffer 4k|8k;配置IMAP协议读数据缓存的大小

10.smtp_auth method ...;:配置SMTP认证用户的方式,与pop3_auth类似

11.smtp_capabilities extensions ...;:配置SMTP协议的扩展功能,与pop3_capabilities类似

12.auth_http URL;:配置Nginx提供邮件服务时的用于HTTP认证的服务器地址

13.auth_http_header X-Auth-Key "secret_string":在Nginx服务器发起认证请求时,向请求头添加指定的头域

14.auth_http_timeout time;:配置Nginx服务器向HTTP认证服务器发起认证请求后等待响应的超时时间

15.proxy_bufffer 4k|8k;:用于配置了后端代理服务器(组)的情况,用来配置Nginx服务器代理缓存的大小,一般为平台的一个内存页大小

16.proxy_pass_error_message on | off;:用于配置了后端代理服务器(组)的情况,用来配置是否将后端服务器上邮件服务认证过程中产生的错误信息发送给客户端

十、Nginx源码结构

1.Nginx源码的模块:公共功能、配置解析、内存管理、事件驱动、日志管理、HTTP服务、Mail服务、模块支持

十一、Nginx基本数据结构

1.ngx_module_s结构体涉及模块组织

2.ngx_command_s和ngx_conf_s结构体涉及指令解析

3.ngx_pool_s结构体是内存管理的主要结构

4.nginx_connection_s和ngx_signal_t结构体分别涉及网络管理和信号管理

5.ngx_events结构体涉及事件驱动模型的实现

6.ngx_process_t和ngx_cycle_s结构体在进程管理方面发挥主要作用

十二、Nginx的启动初始化

1.-p指定Nginx服务器程序的安装路径,可用于平滑升级

2.-c指定配置文件

3.-g指定补充配置文件

4.-t执行语法检查

十三、Nginx的时间管理

十四、Nginx的内存管理

十五、Nginx工作进程

十六、Nginx的模块编程

十七、Nginx在动态网站建设中的应用实例

1.在JSP网站建设中,可以作为反向代理服务器,将客户端请求发送到Tomcat、Apache等后端服务器完成动态页面处理,可以处理少量的静态网页,更可以进行负载均衡

2.php需要配置FastCGI

十八、Nginx经典应用——LNAMP

https://github.com/zhangyue0503/nginx/tree/master/nginxgaoxingnengwebfuwuqixiangjie

原文发布于微信公众号 - 硬核项目经理(fullstackpm)

原文发表时间:2017-10-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券