nginx之查漏补缺

nginx工作原理

nginx由核心和模块组成,核心负责查找配置文件将客户端请求映射到一个location中,location中所配置的每个指令会启动不同的模块去完成相应的工作。

nginx模块按功能区分有

Handler(处理器模块):直接处理请求,然后输出

Filters(过滤器模块):对处理器模块输出的内容进行修改

Proxies(代理器模块):与后端一些服务进行交互,实现服务代理和负载均衡等功能。

请求--->nginx内核--->handler模块--->filters模块--->http相应

nginx工作方式:有单工作进程和多工作进程

单工作进程:除主进程外,还有工作进程,工作进程是单线程的。nginx默认是单进程模式

主进程作用: 1、接收外界请求,并将请求交给工作进程处理

2、监控工作进程的运行状态

多工作进程:工作进程包含多个线程

nginx如何实现高并发和轻量级?

nginx采用异步非阻塞的事件处理机制,由进程循环处理多个准备好的事件。以epoll为例,未准备好的事件都会放入epoll中,只要有事件准备好,就会进行处理。而apache,每个请求都会独占一个工作线程,当并发数到达几千时,就同时有几千的线程在处理请求了,占用的内存非常大,线程的上下文切换带来的cpu开销也很大,性能就难以上去,同时这些开销是完全没有意义的。

nginx实现负载均衡

nginx支持的调度算法:

1、轮询(默认):根据配置文件中的顺序,把请求依次分配到不同的后端服务器上

2、weight:加权轮询,weight值越大,分配到的访问机率越高

upstream lzs.com {
    server 192.168.1.1 weight=2;
    server 192.168.1.2 weight=1;
    }

3、ip_hash:同一个ip的访客固定访问同一个后端服务器,解决session共享问题

upstream lzs.com {
    ip_hash;
    server 192.168.1.1 ;
    server 192.168.1.2 ;
    }

4、url_hash:同一个url的访问定向到同一个后端服务器上,提高后端缓存服务器的效率,使用这种调度算法需要下载nginx的hash软件包

5、fair:根据后端服务器的相应时间来分配,相应时间短的优先分配,使用这种调度算法需要下载nginx的upstream_fair模块

6、least_conn:最少连接,Web请求会被转发到连接数最少的服务器上。

server指令除了指定后端服务器的ip和端口外,还可以指定每个服务器在负载均衡调度中的状态,常用的状态有:

down:该server不参与负载均衡

backup:当其他server无法相应请求时才会使用这个server

upstream lzs.com {
    server 192.168.1.1;
    server 192.168.1.2 backup;
    }

*当调度算法为ip_hash时,状态不能是backup

location匹配规则

1、匹配分为普通匹配和正则匹配,普通匹配又分为精确匹配和最大前缀匹配。

2、先匹配普通匹配,再匹配正则匹配

3、正则匹配会覆盖最大前缀匹配

4、当普通 location 前面指定了“ ^~ ”时,该条匹配上时不再需要继续匹配

5、当匹配上精确匹配时,不再需要继续匹配

总结:匹配优先级:精确匹配>指定“^~”的普通匹配>正则匹配>最大前缀匹配

例:

location / {......}    #最大前缀匹配,匹配以/开头的url,但会被正则匹配覆盖
location = / {......}    #精确匹配url=/,不再继续匹配
location ^~/img/ {……}    #匹配以/img/开头的url,不再继续匹配
location ~ .*\.(gif|jpg|png)$ {……}    #匹配图像文件

此外,~:区分大小写

~*:不区分大小写

nginx代理部分中X-Real-IP和X-Forwarded-For的区别:

一般来说,X-Forwarded-For是用于记录代理信息的,每经过一级代理(匿名代理除外),代理服务器都会把这次请求的来源IP追加在X-Forwarded-For中

来自4.4.4.4的一个请求,header包含这样一行

X-Forwarded-For: 1.1.1.1, 2.2.2.2, 3.3.3.3

代表 请求由1.1.1.1发出,经过三层代理,第一层是2.2.2.2,第二层是3.3.3.3,而本次请求的来源IP4.4.4.4是第三层代理

而X-Real-IP,没有相关标准,上面的例子,如果配置了X-Read-IP,可能会有两种情况

// 最后一跳是正向代理,可能会保留真实客户端IPX-Real-IP: 1.1.1.1
// 最后一跳是反向代理,比如Nginx,一般会是与之直接连接的客户端IPX-Real-IP: 3.3.3.3

一般来说,使用X-Forwarded-For效果更好,可以记录完整的代理链路

nginx中的proxy_pass后url是否加/的区别

1、location /test1/ { 
                proxy_pass http://test2; 
     }
2、location /test1/ { 
                proxy_pass http://test2/; 
     }

上面两种配置,区别只在于proxy_pass转发的路径后是否带 “/” 
情况1:如果访问url = http://test1/test/test.html,则被nginx代理后,请求路径会便问http://test2/test/test.html,将test/ 作为根路径,请求test/路径下的资源

情况2:如果访问url = http://test1/test/test.html,则被nginx代理后,请求路径会变为 http://test2/test.html,直接访问server的根资源

nginx中proxy_pass和rewrite的区别

proxy_pass一般用于将请求重定向到定义好的后端服务器上,不支持正则表达式匹配

rewrite一般用于修改请求中域名后边的除去传递的参数外的字符串,支持正则表达式匹配http://seanlook.com/a/we/index.php?id=1&u=str 只对/a/we/index.php重写

详细可参考博文http://blog.csdn.net/mchdba/article/details/50042387。

防盗链

盗链是指一个网站将其他大网站的资源(如音乐、下载、图片等)的地址放在自己的网站上,这样没有任何资源的网站利用了别的网站的资源来展示给浏览者,从而提高自己网站的访问量,对于原网站,一方面损失了一大部分流量,另一方面,还会加重服务器的负担。

防盗链原理:利用HTTP协议中的referer表头字段,referer会记录请求从哪里链接过来的,通过referer跟踪链接来源,一旦检测到来源不是本站即进行阻止或者返回指定的页面。

nginx中防盗链设置可参考博文http://blog.csdn.net/yuwenruli/article/details/8541952。

时间: 2024-10-09 17:29:58

nginx之查漏补缺的相关文章

近来的java小总结(2.1):类的知识的查漏补缺

首先,我是一名新手,所以,要带着批判的眼光来看下面的文章   这篇文章说了些什么? 这文章是我近来8.6号来在编程思想上打的代码,从0~200页的源码接近到在这里,下文正是总结这0~200页的的知识,涉及到接口,内部类.初始化,数值计算的一些细节.此文章不会一下子写完,可能隔一天可能再补下来.因为代码确实有点多.. 注意 1 我的注释不一定正确(不过各小标题和代码一定是正确的,因为是书本上的原话,但是注释不一定正确),如果你确信我的内容的话,你可能会损失很大,因为我只是个菜鸟,我只是来补救一些知

查漏补缺——java多态

---恢复内容开始--- 刚学完java,开始了查漏补缺阶段阶段,为了巩固自己的知识和为别人提供一些微末的帮助决定开通博客,求各位大牛们指出我的不足,不要吝惜言语,也希望我的总结可以对别人有帮助,对自己对他人负责. 开始正文:术语多态:可以定义为“有多种形态”,多态引用是一个一个在不同时刻可以指向不同类型对象的引用变量.通过多态引用可以调用不同的具体的方法. 类方法的多态性的实现有两种方式: 1:方法重载:可以声明多个同名但是参数不同(个数.类型和顺序)的方法.注意呵呵重载方法只能声明在一个类里

近来的java小总结(2.2):类的知识的查漏补缺

1 首先,我是一名新手,所以,要带着批判的眼光来看下面的文章   这篇文章说了些什么? 这文章是我近来8.6号来在编程思想上打的代码,从0~200页的源码接近到在这里,下文正是总结这0~200页的的知识,涉及到接口,内部类.初始化,数值计算的一些细节.此文章不会一下子写完,可能隔一天可能再补下来.因为代码确实有点多.. 注意 1 我的注释不一定正确(不过各小标题和代码一定是正确的,因为是书本上的原话,但是注释不一定正确),如果你确信我的内容的话,你可能会损失很大,因为我只是个菜鸟,我只是来补救一

java知识查漏补缺

一.重写(override)和重载(overload)的区别 二者除了名字相似,其实没什么联系 范围不同:重写发生在同一个类的不同方法之间.重载发生在父类和子类自荐. 前提: 重写要求:方法名相同,参数列表不同,对于返回值类型不要求相同. 重载要求:方法名形同,参数列表也相同.重载是实现多态的关键,注意如果父类中的方法是private类型,那么子类中对应方法不算重载,而相当于是定义了一个新方法. 二.final的用法 修饰类:该类不能被继承 修饰方法:该方法不能被重写 修饰属性:该属性初始化后不

自家用的java小总结(2.4):类的知识的查漏补缺(内部类)

1 2      首先,这是一篇自己用的文章,不对读者承担任何责任,所以,要带着批判的眼光来看下面的文章   1 发现了,得加上输出结果,怕自己出错,~~   这篇文章说了些什么? 这文章是我近来8.6号来在编程思想上打的代码,从0~200页的源码接近到在这里,下文正是总结这0~200页的的知识,涉及到接口,内部类.初始化,数值计算的一些细节.此文章不会一下子写完,可能隔一天可能再补下来.因为代码确实有点多.. 注意 1 我的注释不一定正确(不过各小标题和代码一定是正确的,因为是书本上的原话,但

查漏补缺

查漏补缺[1].this语句:this语句用于构造函数之间进行相互调用.this语句只能定义在构造函数的第一行,因为初始化要先执行.[2].对象的初始化过程 Person p =new Person("hei",10); 1.因为new用到了Person.class,所以先找到Person.class文件加载到内存中 2.执行类中的静态代码块,如果有的话,给Person.class类进行初始化 3.在堆内存中开辟空间,分配内存地址 4.在堆内存中建立对象的特有属性,并进行默认初始化 5

《CSS权威指南》基础复习+查漏补缺

前几天被朋友问到几个CSS问题,讲道理么,接触CSS是从大一开始的,也算有3年半了,总是觉得自己对css算是熟悉的了.然而还是被几个问题弄的"一脸懵逼"... 然后又是刚入职新公司,事情不算多,于是拿起<CSS权威指南>进行"基础学习"+"查漏补缺",本篇文章主要是总结了些自己认为CSS中值的注意的几个知识点(本文知识点仅限本书范围内,若要讲CSS全部样式,那本兽还是选择慢慢懵逼去~). 选择器 这里要说明的是类选择器的嵌套选择与多类

hibernate查漏补缺2

Hibernate对象状态 瞬时(transient):由new操作符创建,且尚未Hibernate Session关联.瞬时对象不会被持久化到数据库,也不会被赋予持久化标识. 持久(persistent):持久化的实例在数据库中有对应的记录,并拥有一个持久化标识. 持久化的实例可能是刚被保存,或刚被加载的,无论哪一种,它都只存在于相关联的Session作用范围内.这点很重要.Hibernate会检测处于持久化状态的对象的任何变动,在当前操作单元执行完毕时,将对对象数据与数据库同步. 脱管(de

今天开始慢下脚步,开始ios技术知识的查漏补缺。

从2014.6.30 开始工作算起.现在已经是第416天了.不止不觉,时间过的真快. 通过对之前工作的总结,发现,你的知识面,会决定你面对问题时的态度.过程和结果. 简单来讲,知识面拓展了,你才能有更多的备选方法,才更有可能选择到一条最最有效的路. 趁现在正好有时间,时机又正好,开始我的技术总结补缺之路吧. 参考教材<疯狂iOS讲义>.主要原因是,知识比较全面,涉及面比较广.适合查漏补缺. 开始吧.看我能坚持多久. 版权声明:本文为博主原创文章,未经博主允许不得转载.