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;
}
六、预约义变量