nginx之查漏补缺

nginx工做原理php

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

nginx模块按功能区分有nginx

    Handler(处理器模块):直接处理请求,而后输出正则表达式

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

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

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


nginx工做方式:有单工做进程和多工做进程缓存

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

          主进程做用: 一、接收外界请求,并将请求交给工做进程处理
服务器

                 二、监控工做进程的运行状态

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


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

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


nginx实现负载均衡

    nginx支持的调度算法:

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

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

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

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

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

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

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

  六、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匹配规则

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

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

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

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

    五、当匹配上精确匹配时,再也不须要继续匹配

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

 例:

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是否加/的区别

一、location /test1/ { 
                proxy_pass http://test2; 
     }
二、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。

相关文章
相关标签/搜索