思念可以到达比河流更远的地方

目录

后端服务器组配置指令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。

地址转发

它是指在网络数据传输过程中数据分组到达路由器或桥接器后,该设备通过检查分组地址并将数据转发到最近的局域网的过程。

因此地址重写和地址转发有以下不同点:

  1. 地址重写会改变浏览器中的地址,使之变成重写成浏览器最新的地址。而地址转发他是不会改变浏览器的地址的。
  2. 地址重写会产生两次请求,而地址转发只会有一次请求。
  3. 地址转发一般发生在同一站点项目内部,而地址重写且不受限制。
  4. 地址转发的速度比地址重定向快。

常规指令

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 基础详解(二)相关推荐

  1. Nginx 基础详解(一)

    春生夏长,秋收冬藏 目录 Nginx简介 Nginx配置 1. 全局块 2. events块 3. http块 4. server块 5. location块 Nginx架构 1. Web请求处理机制 ...

  2. Python学习二:词典基础详解

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7862377.html 邮箱:moyi@moyib ...

  3. Android基础入门教程——8.3.5 Paint API之—— Xfermode与PorterDuff详解(二)

    Android基础入门教程--8.3.5 Paint API之-- Xfermode与PorterDuff详解(二) 标签(空格分隔): Android基础入门教程 本节引言: 上一节,我们学习了Xf ...

  4. 全志 android 编译,全志Android SDK编译详解(二)

    注意要确定安装了jdk) 第一步: cd  lichee; ./build.sh  -p sun5i_elite -k 3.0  (apt-get install uboot-mkimage需要安装m ...

  5. PopUpWindow使用详解(二)——进阶及答疑

    相关文章: 1.<PopUpWindow使用详解(一)--基本使用> 2.<PopUpWindow使用详解(二)--进阶及答疑> 上篇为大家基本讲述了有关PopupWindow ...

  6. linux 进程间通信 dbus-glib【实例】详解二(上) 消息和消息总线(附代码)

    linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...

  7. Android Loader 异步加载详解二:探寻Loader内部机制

    Android Loader 异步加载详解二:探寻Loader内部机制 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/7025991 ...

  8. Nginx 架构详解

    Nginx 架构详解 nginx的下篇将会更加深入的介绍nginx的实现原理.上一章,我们了解到了如何设计一个高性能服务器,那这一章将会开始讲解,nginx是如何一步一步实现高性能服务器的. Ngin ...

  9. 【云原生之k8s】k8s基础详解

    [云原生之k8s]k8s基础详解 前言 一.kubernetes介绍 (1)kubernetes简介 (2)应用部署方式的演变 二.kubernetes组件 (1)kubernetes架构 (2)ma ...

最新文章

  1. 打分矩阵Scoring Matrices
  2. JAVA图形界面(GUI)之布局管理器
  3. MySQL Proxy 读写分离(实战总结)
  4. java条码大小_java – 自定义条形码输入中缺少条形码高度
  5. hive提交命令org.apache.hadoop.yarn.exceptions.YarnRuntimeException: Error parsing application ID:
  6. 数学建模3 论文排版注意点
  7. 论文浅尝 | 融合多粒度信息和外部语言知识的中文关系抽取
  8. 数据泵 远程服务端数据导出
  9. 计算机处理技术职业道德与论文,关于计算机职业道德的论文选题 计算机职业道德毕业论文题目怎样定...
  10. 理论力学知识要点(八)
  11. 三国历史上最不该被埋没的十大人才!
  12. 正高职称 程序员_软考通过之后,如何评职称呢?
  13. java生产者消费者 阻塞_java之使用阻塞队列实现生产者,消费者模式
  14. 【格言精选】影视剧情大俗套——你注意到多少
  15. java中echat如何动态_ECharts Java 动态加载数据,echartsjava
  16. Springboot毕设项目股票交易模拟系统76wrijava+VUE+Mybatis+Maven+Mysql+sprnig)
  17. arm汇编总结---让汇编不再神秘
  18. Python头部信息的设置
  19. 武侠小说阅读记录 2009-02-18 21:14
  20. 宝马335i手动挡和M3手动挡的对比

热门文章

  1. 判断链表中是否有环链
  2. mux-vlan配置
  3. MySQL笔记 07:多表连接查询
  4. 香港美酒佳肴巡礼首次于云端举行带游客领略舌尖上的饕餮盛宴
  5. ActivityManager的简单使用
  6. 交大安泰学计算机,交大安泰EMBA学费一年是多少?
  7. ActiveMQ做消息队列拦截功能
  8. [工作] 使在家办公(Work From Home)更有效率的建议
  9. 正则截取某开头结尾中间的内容,但不包含开头、结尾
  10. 软件项目需求分析困难的原因