一、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.监听:
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服务器的处理方式
五、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.地址重写与转发:
3.if (condition) {...}:支持条件判断,根据条件判断结果选择不同的Nginx配置,可以在server块或location块中配置
4.break,用于中断当前相同作用域中的其他Nginx配置;return [text | code | URL | code URL],用于完成对请求的处理,直接向客户端返回响应状态代码
5.rewrite regex replacement [flag]:通过正则表达式的使用来改变URI
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个指令
2.server块中必须有resolver,不能有server_name,不支持HTTPS站点
C.Nginx服务器的反向代理服务
1.反向代理的基本设置的21个指令
2.Proxy Buffer的配置的7个指令
3.Proxy Cache的配置的12个指令
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