Nginx 基础详解(二)
思念可以到达比河流更远的地方
目录
后端服务器组配置指令upstream
rewrite配置
地址重写
地址转发
常规指令
Rewrite使用
常用全局变量
域名跳转
域名镜像
独立域名
目录添加“/”
目录合并
防盗链
常用正则
后端服务器组配置指令upstream
通过 upstream 可以设定后端服务器,指定的方式可以是 IP 地址与端口、域名、UNIX 套接字(socket)。其中如果域名可以被解析为多个地址,则这些地址都作为 backend。下面举例说明:
upstream name {... }. //其中name是服务器组名称,{ }中是服务器组中包含的服务器。默认是轮询,也有加权
配置样例:
upstream my_backend {# ip_hash; least_conn;server www.baidu.com backup;server 111.222.101.102:8080 down;server unix:/home/work/hhvm/var/hhvm.sock max_failes=3 fail_timeout=10s weight=5;keepalive_timeout 30s;keepalive_requests 100;
}server {location / {proxy_pass http://my_backend;}
}
常用参数说明:
server:负载均衡后端的服务器的IP或域名,不写端口默认是80。
weight:后端服务器的权重,默认为1,权重越大接收的请求越多。
max_fails:检查节点的健康状态并允许请求失败的次数,达到该次数将节点下线,默认为1,0表示禁止失败尝试,例如:max_fails=2。
fail_timeout:max_fails失败次数达到限制后暂停该节点服务器时间,默认是10秒。
backup:热备配置,当服务池中所有的服务器出现问题后会自动上线backup服务器。
down:标志服务器不可用,不参与负载均衡,这个参数通常配合IP_HASH使用。
max_conns:限制最大连接数,通常对后端服务器硬件不一致的情况进行配置。
keepalive:限制空闲长连接的最大数量。
keepalive_timeout:空闲长连接的最长保持时间。
keepalive_requests:每个长连接最多可以处理的请求数。
ip_hash:实现会话保持功能,将某个客户端的多次请求定向到同一台服务器上,保证客户端与服务端之间建立稳定的会话。首先ip_hash不能够和weight变量一起使用,其次,由于ip_hash是根据客户端ip地址分配的服务器,因此在整个系统中,nginx服务器应该是处于最前端的服务器,才能够获取客户端ip地址,否则它获取的将是位于它前面的服务器地址,产生问题。同时注意客户端IP必须是C类地址。
least_conn: 实际的含义,选取活跃连接数与权重weight的比值最小者为下一个处理请求的server,上一次已选的server和已达到最大连接数的server照例不在选择的范围。
rewrite配置
Rewrite是nginx服务器提供的一个重要的基本功能,通过正则表达式的使用来改变URI,可以在server块或location块中配置,其基本语法结构如下:
rewrite regex replacement [flag];注:flag使用last和break时浏览器中的地址不会改变,使用redirect和permanent则会改变
- last 停止处理后续rewrite指令集,跳出location作用域,并开始搜索与更改后的URI相匹配的location,URL地址不变(继续匹配)
- break 停止处理后续rewrite指令集,不会跳出location作用域,不再进行重新查找,终止匹配,URL地址不变(终止匹配)
- redirect 返回302临时重定向,浏览器地址栏会显示跳转后的URL地址,爬虫不会更新自己的URL数据库
- permanent 返回301永久重定向,浏览器地址栏会显示跳转后的URL地址,爬虫会更新自己的URL数据库
地址重写
是为了实现地址的标准化,比如我们可以在地址栏中中输入 www.baidu.com. 我们也可以输入 www.baidu.cn. 最后都会被重写到 www.baidu.com 上。浏览器的地址栏也会显示www.baidu.com。
地址转发
它是指在网络数据传输过程中数据分组到达路由器或桥接器后,该设备通过检查分组地址并将数据转发到最近的局域网的过程。
因此地址重写和地址转发有以下不同点:
- 地址重写会改变浏览器中的地址,使之变成重写成浏览器最新的地址。而地址转发他是不会改变浏览器的地址的。
- 地址重写会产生两次请求,而地址转发只会有一次请求。
- 地址转发一般发生在同一站点项目内部,而地址重写且不受限制。
- 地址转发的速度比地址重定向快。
常规指令
if:用于支持条件判断
if (!-f $request_filename) {return 414;
}
正则表达式匹配:
=,!=:等值比较;
~: 与指定正则表达式模式匹配时返回“真”,判断匹配与否时区分字符大小写;
~*:与指定正则表达式模式匹配时返回“真”,判断匹配与否时不区分字符大小写;
!~: 与指定正则表达式模式不匹配时返回“真”,判断匹配与否时区分字符大小写;
!~*: 与指定正则表达式模式不匹配时返回“真”,判断匹配与否时不区分字符大小写;
文件及目录匹配判断:
-f, !-f: 判断指定的路径是否为存在且为文件;
-d, !-d:判断指定的路径是否为存在且为目录;
-e, !-e:判断指定的路径是否存在,文件或目录均可;
-x, !-x:判断指定路径的文件是否存在且可执行;
break:用于中断当前相同作用域的其他nginx配置。处于break指令前,配置有效;反之,配置无效。
return:用于完成对请求的处理,直接向客户端返回响应状态代码。处于该指令后的所有nginx配置都是无效的。
return 200 "ok";
return 301 http://www.baidu.com;
return http://www.baidu.com
- 第一种: return code [text];
- 第二种: return code URL;
- 第三种: return URL;
rewrite:通过正则表达式的使用改变URI,可以同事存在一个或者多个指令,按照顺序依次对URL匹配和处理。
rewrite regex replacement [flag];
rewrite的含义:URL重写的指令。
regex的含义:匹配URI的正则表达式。
replacement:将regex正则匹配到的内容替换成 replacement。
flag: flag标记。
set:指令是用于定义一个变量,并且赋值。应用环境server,location,if。
if ( $host ~* "^(.*)\.dabaidu\.com$" ) {set $user $1;rewrite .* http://www.baidu.com/$user permanent;}
rewrite_log:配置是否开启URL重写日志的输出功能。
rewrit_log on|off
Rewrite使用
常用全局变量
- $args : #这个变量等于请求行中的参数,同$query_string
- $content_length : 请求头中的Content-length字段。
- $content_type : 请求头中的Content-Type字段。
- $document_root : 当前请求在root指令中指定的值。
- $host : 请求主机头字段,否则为服务器名称。
- $http_user_agent : 客户端agent信息
- $http_cookie : 客户端cookie信息
- $limit_rate : 这个变量可以限制连接速率。
- $request_method : 客户端请求的动作,通常为GET或POST。
- $remote_addr : 客户端的IP地址。
- $remote_port : 客户端的端口。
- $remote_user : 已经经过Auth Basic Module验证的用户名。
- $request_filename : 当前请求的文件路径,由root或alias指令与URI请求生成。
- $scheme : HTTP方法(如http,https)。
- $server_protocol : 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
- $server_addr : 服务器地址,在完成一次系统调用后可以确定这个值。
- $server_name : 服务器名称。
- $server_port : 请求到达服务器的端口号。
- $request_uri : 包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。
- $uri : 不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。
- $document_uri : 与$uri相同。
域名跳转
域名镜像
独立域名
类似于域名镜像,针对不同的域名对应后端同一个服务的不同目录
目录添加“/”
目录合并
防盗链
常用正则
. : 匹配除换行符以外的任意字符
? : 重复0次或1次
+ : 重复1次或更多次
* : 重复0次或更多次
\d :匹配数字
^ : 匹配字符串的开始
$ : 匹配字符串的介绍
{n} : 重复n次
{n,} : 重复n次或更多次
[c] : 匹配单个字符c
[a-z] : 匹配a-z小写字母的任意一个小括号()之间匹配的内容,可以在后面通过$1来引用,$2表示的是前面第二个()里的内容。正则里面容易让人困惑的是\转义特殊字符。
Nginx 基础详解(二)相关推荐
- Nginx 基础详解(一)
春生夏长,秋收冬藏 目录 Nginx简介 Nginx配置 1. 全局块 2. events块 3. http块 4. server块 5. location块 Nginx架构 1. Web请求处理机制 ...
- Python学习二:词典基础详解
作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7862377.html 邮箱:moyi@moyib ...
- Android基础入门教程——8.3.5 Paint API之—— Xfermode与PorterDuff详解(二)
Android基础入门教程--8.3.5 Paint API之-- Xfermode与PorterDuff详解(二) 标签(空格分隔): Android基础入门教程 本节引言: 上一节,我们学习了Xf ...
- 全志 android 编译,全志Android SDK编译详解(二)
注意要确定安装了jdk) 第一步: cd lichee; ./build.sh -p sun5i_elite -k 3.0 (apt-get install uboot-mkimage需要安装m ...
- PopUpWindow使用详解(二)——进阶及答疑
相关文章: 1.<PopUpWindow使用详解(一)--基本使用> 2.<PopUpWindow使用详解(二)--进阶及答疑> 上篇为大家基本讲述了有关PopupWindow ...
- linux 进程间通信 dbus-glib【实例】详解二(上) 消息和消息总线(附代码)
linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...
- Android Loader 异步加载详解二:探寻Loader内部机制
Android Loader 异步加载详解二:探寻Loader内部机制 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/7025991 ...
- Nginx 架构详解
Nginx 架构详解 nginx的下篇将会更加深入的介绍nginx的实现原理.上一章,我们了解到了如何设计一个高性能服务器,那这一章将会开始讲解,nginx是如何一步一步实现高性能服务器的. Ngin ...
- 【云原生之k8s】k8s基础详解
[云原生之k8s]k8s基础详解 前言 一.kubernetes介绍 (1)kubernetes简介 (2)应用部署方式的演变 二.kubernetes组件 (1)kubernetes架构 (2)ma ...
最新文章
- 打分矩阵Scoring Matrices
- JAVA图形界面(GUI)之布局管理器
- MySQL Proxy 读写分离(实战总结)
- java条码大小_java – 自定义条形码输入中缺少条形码高度
- hive提交命令org.apache.hadoop.yarn.exceptions.YarnRuntimeException: Error parsing application ID:
- 数学建模3 论文排版注意点
- 论文浅尝 | 融合多粒度信息和外部语言知识的中文关系抽取
- 数据泵 远程服务端数据导出
- 计算机处理技术职业道德与论文,关于计算机职业道德的论文选题 计算机职业道德毕业论文题目怎样定...
- 理论力学知识要点(八)
- 三国历史上最不该被埋没的十大人才!
- 正高职称 程序员_软考通过之后,如何评职称呢?
- java生产者消费者 阻塞_java之使用阻塞队列实现生产者,消费者模式
- 【格言精选】影视剧情大俗套——你注意到多少
- java中echat如何动态_ECharts Java 动态加载数据,echartsjava
- Springboot毕设项目股票交易模拟系统76wrijava+VUE+Mybatis+Maven+Mysql+sprnig)
- arm汇编总结---让汇编不再神秘
- Python头部信息的设置
- 武侠小说阅读记录 2009-02-18 21:14
- 宝马335i手动挡和M3手动挡的对比