HTTP 服务器次要是在客户端向其发送申请时 向客户端投递网页的 个软件 。
Nginx 的零碎架构
HTTP 外围模块
应用 limits 避免滥用。
束缚拜访。
流媒体文件。
预约义变血。
SPDY 矛口 HTTP/2
应用 Nginx PHP-FPM
Nginx uWSGI 联合。
一、Nginx零碎架构
nginx 蕴含一个繁多的master过程和多个worker过程。所有这些过程都是单线程,并且设计为同时解决成千上万个连贯。
worker过程是解决连贯的中央,这个组件用于解决客户端申请的。Nginx 应用了操作系统事件机制来疾速响应这些申请。
master过程负责读取配置文件、解决套接字、派生worker过程、关上日志文件和编译嵌入式的perl脚本。Nginx建设在一个模块化的形式之上,各个模块链接在 起成为 个管道来
解决连贯和申请。
二、HTTP外围模块
http模块是Nginx的外围模块,通过http解决客户端的所有交互。
1、server指令
作用:开始一个新的上下文,
例一、两个server_name代表的意义统一
server {
listen 127.0.0.1:80;
server_name default.example.com;
server_name_in_redirect on; #在该 Context 中,对任何由 Nginx 公布的重定向,该指令都应用Server name 指令的第 个值来激活
}
server {
listen 127.0 . 0.1:80;
server_name www.example.com;
}
例二、解决没有host的
server {
server name ””;
}
2、Nginx中的日志
log_format指令容许你明确指定记录要记在的内容
http {
log_format vhost host $remote_addr - $remote_user [$time_local ]’’”$request ”$status $body_bytes_sent ’ ’”$http_referer””$http_user_agent ”’;
# 地址-用户名-本地工夫( %d /%b/%Y %H%M:%S %z)-申请信息 -该变量指定响应状态-该变量指定发送到客户端的字节数,不包含响应头
log_format downloads ’ $time_iso8601 $host $remote_addr ’’” $request "$status $body_bytes_sent $request_ time ’;
open_log_file_cache max=lOOO inactive=60s;
access_ log logs/access.log;
server {
server_name ~< (WWW\ • ) ? ( . + ) $ ;
access_ log logs/combined.log vhost;
access_log logs/$2/access .log;
location /downloads {
access_log logs/downloads.log downloads;
}
}
}
3、查找文件
例:
server {
root home/customer/html ; #对立设置了文件保留目录
location I {
index index .html index.htm;
}
location /downloads {
autoindex on ;
}
root:
try_files:该指令对于给定 参数测试文件的存在性。如果后面的文件都没有找到,那么最初的条目将会作为备用,所以确保最初 个门路或者命名的 location在,或者通过=< status code >设置 个返回状态代码
4、域名解析
5、客户端的交互
次要是客户端与上游服务器,的连贯(IP地址、超时、存活工夫等)和属性。
default_type 该指令设置响应的默认 MIME 类型。如果文件的 MIME 类型不能被types 指令指定的类型正确地匹配,那么将会应用该指令指定的类型 (MIME 类型指的用来标识辨别浏览器中显示的内容如HTML、有 XML、有 GIF、还有 Flash …… 如 Content-Type: text/HTML)
erro_page 该指令定义一个用于拜访的URL,在遇到设置的错误代码时将会由该 URI提供拜访。应用=号参数能够扭转响应代码。如果=号的参数为空,那么响应代码来自于前面的 URI ,在这种悄况下必须由某种上游服务器提供)
etag 对于动态资源,该指令禁止主动产生 ETag 响应头(默认值为 on)
if_modified_since 通过比拟if_modified_since申请头的值,该指令管制如何批改晌应工夫
recursive_error_pages 该指令启用 error page 指令(默认值为 off )实现多个重定向
例:
http {
# a generic error page to handle any server-level err rs
error_page 500 501 502 503 504 share/examples/nginx/50x.html;
server {
server_name www.example.com;
root /home/customer/html;
# for any files not found , the page located at
# /home/customer/html/404.html will be delivered
error_page 404 /404.html ; #该指令定义一个用于拜访的URL,在遇到设置的错误代码时将会由该 URI提供拜访。
location / {
# any server-level errors for this host will be directed
# to a custom application handler
error_page 500 501 502 503 504 = @error_handler; #该指令定义一个用于拜访的URL,在遇到设置的错误代码时将会由该 URI提供拜访。
}
location /microsite {
# for any non-existent files under the /microsite URI ,
# the client will be shown a foreign page
error_page 404 http://microsite . example.com/404 . html ;
# the named location containing the custom error handler
}
location @error_handler {
# we set the default type here to ensure the browser
# displays the error page correctly
default_type text/html;
proxy_pass http://127.0.0.1:8080 ;
}
}
}
三、应用 limits 避免滥用。
限度拜访形式次数的指令
limit_conn 该指令指定一个共享内存域(由指令 limit_conn_zone 配置),并且指定每个键.值对的是大连接数
limit_conn_log_level 因为配置了limit_conn指令,在nginx限度连贯达到阀值,会产生谬误日志,该指令用于指定设置日志级别
limit_conn_zone 指定一个key,限度在limit_conn作为第一个参数,第二个参数zone ,表明用于存储 key 的共享内存区名字、以后每个 key的连贯数量以及 zone 的大小 (name :size)
limit_rate 该指令限度客户端下载内容的速率(单位为字节/秒〉。速率限度在连贯级别,这意味着 个单 的客户能够关上多个连贯减少其吞吐量
limit_rate_after 在实现设定的字节数之后,该指令启用 limit rate 限度
limit_req 在共享内存(同 limit_req_zone 起配置)中,对特定 key 设置并发申请能力的限度。并发数量能够通过第二个参数指定。如果要求在两个申请之间没有延时,那么须要配置第三个参数 nodelay
limit_req_log_level Nginx 应用了limit_req指令限度申请数量后 ,通过该指令指定在什么级别下报告日志记录。在这里延时(delay 〉记录级别要小于批示(indicated )级别
limit_req_zone 指定一个key,限度在limit_conn作为第一个参数,第二个参数zone ,表明用于存储 key 的共享内存区名字、以后每个 key的连贯数量以及 zone 的大小 (name :size) 。第三个参数 rate,表明配置在受到限制之前,每秒( r/s )申请数,或者每分钟申请数( r/m)
max_ranges 该指令设置在 byte-range 申请中最大的申请数量。设置为 0禁用对 byte-range 的反对
实例:1个ip地址限度在10个连贯
http {
limit_conn_ zone $binary rem te_addr zone=connections : l0m;
limit_conn_log_level notice ;
server {
limit_conn connections 10 ;
}
}
实例二、单元工夫内一个用户申请多少页面时,nginx会在第一个申请页面后插入一个延时,直到这段时间过来。
http {
limit_req_zone $binary_remote_addr zone=requests:l0m rate=lr/s; #限度连接数为10 每秒限度1次访问
limit_req log level warn;
server {
limit_req_zone=requests burst=l0 nodelay
}
}
实例三、限度每个客户端的带宽。这种办法能够确保 些客户端不会把所有可用的带宽占用完。正告 只管 limit 指令是连贯根底, 个容许关上多个连贯的客户端依然能够绕开这个限度。
location /downloads {
limit_rate SOOk;
}
容许小文件自在下载,大文件限度
location /downloads {
limit_rate_after lm; #对limit_rate启用,限度1m以上的文件
limit_rate 500k ;
}
小结综合:
http {
limit_conn_zone $binary_ remote_addr zone=ips:lOm; #申请数量限度
limit_conn_ zone $server_name zone=servers:lOm; #申请数量限度
limit_req_zone $binary_remote_addr zone=requests: lOm rate=lr/s; #申请频率管制
limit_conn_log_level notice ; #连贯达到阀值的日志级别
limit_req_log_level warn; #频率达到阀值日志打印的级别
# immediately release socket buffer memory on timeout
reset_timedout_connection on ;
server {
# these limits apply to the whole virtual server
limit_conn ips 10;
# only 1000 simultaneous connections to the same server_name
limit_conn servers 1000 ;
location /search {
# here we want only the /search URL to be rate- limited
limit_req zone=requests burst=3 nodelay ;
}
location /downloads {
# using limit_conn to ensure that each client is
# bandwidth-limited
# with no getting around it
limit_conn connections l ;
limit_rate_after lm ;
limit_rate 5OOk;
}
}
}
四、束缚拜访
上文提及了客户端与上游服务器连贯的属性一些指令的设置,束缚拜访就来对一组特定的ip来进行拜访限度。
allow 该指令容许从这个 IP 地址、网络或者值为 all 的拜访
auth_basic 该指令启用基于 HTTP 根本认证。以字符串作为域的名字。如果设置为off ,那么示意 auth_basic 不再继承下级的设置
auth_basic_user_file 该指令指定一个文件的地位,该文件的格局为 username: password: comment ,用于用户认证。 password 局部须要应用明码算法加密解决。comment 是可选的局部
deny 该指令禁止从 IP 地址、网络或者值为 all 的拜访
statisFy 如果后面的指令应用了 all 或者 any ,那么容许拜访 默认值为 all.示意用户必须来自于一个特定的网络地址,并且输出正确的明码
实例一
location /stats {
allow 127.0.0.1;
deny all;
}
容许:本地拜访/stats
实例二、
server {
server_name restricted.example.com;
auth_basic ”restricted"; #域的名字
auth_basic_user_file conf/htpasswd; # 指定用户验证文件在conf/htpasswd中
}
五、流媒体文件
nginx提供肯定的流媒体反对
援用
flv 该指令在该 location 中激活 fl 模块
mp4 该指令在该 location 中激活 mp4 模块
mp4_buffer_size lm; mpv初始缓冲大小
mp4_max_buffer_size 20m; MP4最大缓冲
location /videos {
mp4 ;
mp4_buffer_size lm;
mp4_max_buffer_size 20m;
}
六、预约义变量
发表回复