设为首页 收藏本站
查看: 537|回复: 0

[经验分享] nginx之查漏补缺

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-9-27 09:03:08 | 显示全部楼层 |阅读模式
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值越大,分配到的访问机率越高
1
2
3
4
upstream lzs.com {
    server 192.168.1.1 weight=2;
    server 192.168.1.2 weight=1;
    }



        3、ip_hash:同一个ip的访客固定访问同一个后端服务器,解决session共享问题
1
2
3
4
5
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

1
2
3
4
upstream lzs.com {
    server 192.168.1.1;
    server 192.168.1.2 backup;
    }



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


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

    2、先匹配普通匹配,再匹配正则匹配
   3、正则匹配会覆盖最大前缀匹配
    4、当普通 location 前面指定了“ ^~ ”时,该条匹配上时不再需要继续匹配
    5、当匹配上精确匹配时,不再需要继续匹配
  总结:匹配优先级:精确匹配>指定“^~”的普通匹配>正则匹配>最大前缀匹配

例:
1
2
3
4
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
2
3
1、location /test1/ {
                proxy_pass http://test2;
     }



1
2
3
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。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-278050-1-1.html 上篇帖子: Linux Nginx Https搭建 下篇帖子: 使用nginx 防止网站爬虫
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表