• Nginx用作反向代理服务器


    Nginx作为反向代理服务器时转发请求的流程
    客户端请求处理
      • 当客户端请求来时,Nginx并不会立刻转发到上游服务器,而是想完整的接收到Nginx所在的服务器,
      • 然后再把缓存的客户端的请求转发到上游服务器。
      • 优缺点
        • 缺点:请求处理延迟
        • 优点:降低上游服务器的负载
          • 由于网络,以及TCP分包的原因;一个大的数据包,很可能需要多个TCP连接来接受,这样如果一接受到就转发,那么传完一个请求就需要多个TCP连接,对并发性提出考验。
          • Nginx先把整个请求都放到自己的内存或硬盘中,等待这个请求的所有包都过来了,然后一次性 传到上游服务器,这样降低了对上游服务器的并发要求,而且由Nginx于上游服务器时内网,传输速度更快。
     
     
    使用场景

     
     
    非模式匹配定义--uri 不带入上游
     
        location /bbs {
            proxy_pass http://www.magedu.com:8080/;
        }
    访问      www.localhost.com/bbs -->
    代理到    www.mageedu.com:8080/
     
    模式匹配定义--uri带入上游
    如果location的URI是通过模式匹配定义的,其URI将直接被传递至上游服务器,而不能为其指定转换的另一个URI。
    location ^~ /bbs {
            proxy_pass http://www.magedu.com;
        }
    访问:     www.localhost.com/bbs
    代理到     www.mageedu.com/bbs
    注意:此时的上游服务器是不允许有URI 的,否则URL都无效 转至上游服务器的主页;
    而如果使用正则表达式的URI如 ~ ~* 此时上游服务器带URI则报错 
    具体报错
    "proxy_pass" cannot have URI part in location given by regular expression, or inside named location, or inside "if" statement, or inside "limit_except"
    重定向--使用重定向URI 替代反向代理URI
    如果在loation中使用的URL重定向,那么nginx将使用重定向后的URI处理请求,而不再考虑上游服务器上定义的URI。
    如下面所示的例子中,传送给上游服务器的URI为/index.php?page=<match>,而不是/index。.
        location / {
            rewrite /(.*)$ /index.php?page=$1 break;
            proxy_pass www.mageedu.com:8080/index;
        }
     
    访问:     www.localhost.com/index.php
    代理到     www.mageedu.com:8080/index.php?page=$1
     
    proxy模块指令

     
    • proxy_connect_timeout
      • nginx将一个请求发送至upstream server之前等待的最大时长;
    • proxy_cookie_domain:
      • 将upstream server通过Set-Cookie首部设定的domain属性修改为指定的值,
      • 其值可以为一个字符串、正则表达式的模式或一个引用的变量;
    • proxy_cookie_path:
      • 将upstream server通过Set-Cookie首部设定的path属性修改为指定的值,
      • 其值可以为一个字符串、正则表达式的模式或一个引用的变量;
    • proxy_hide_header:
      • 设定发送给客户端的报文中需要隐藏的首部;
    • proxy_pass:
      • 指定将请求代理至upstream server的URL路径;
    • proxy_set_header:
      • 将发送至upsream server的报文的某首部进行重写;
    • proxy_redirect:
      • 重写location并刷新从upstream server收到的报文的首部;
    • proxy_send_timeout:
      • 在连接断开之前两次发送至upstream server的写操作的最大间隔时长;
    • proxy_read_timeout:
      • 在连接断开之前两次从接收upstream server接收读操作的最大间隔时长;
     
    反向代理性能优化

    在反向代理场景中,nginx有一系列指令可用于定义其工作特性,如缓冲区大小等,给这些指令设定一个合理的值,可以有效提升其性能。
     
    缓冲区设定
    nginx在默认情况下在将其响应给客户端之前会尽可能地接收来自upstream服务器的响应报文,它会将这些响应报文存暂存于本地并尽量一次性地响应给客户端。
    然而,在来自于客户端的请求或来自upsteam服务器的响应过多时,nginx会试图将之存储于本地磁盘中,这将大大降低nginx的性能。
    因此,在有着更多可用内存的场景中,应该将用于暂存这些报文的缓冲区调大至一个合理的值。
     
    • proxy_buffer_size size
      • 设定用于暂存来自于upsteam服务器的第一个响应报文的缓冲区大小;
    • proxy_buffering on|off:
      • 启用缓冲upstream服务器的响应报文,
      • 否则,如果proxy_max_temp_file_size指令的值为0,来自upstream服务器的响应报文在接收到的那一刻将同步发送至客户端;
      • 一般情况下,启用proxy_buffering并将proxy_max_temp_file_size设定为0能够启用缓存响应报文的功能,并能够避免将其缓存至磁盘中;
    • proxy_buffers 8 4k|8k
      • 用于缓冲来自upstream服务器的响应报文的缓冲区大小;
     
  • 相关阅读:
    南阳oj 814 又见拦截导弹
    南阳 zb的生日和邮票分你一般(01背包思路)
    导弹拦截(最长下降子序列)变形
    控件绝对定位函数
    小玩意
    java获取本机所有可用字体
    按键监听类KeyListener及适配器改良方案
    编译php-memcached扩展
    Memcached安装,启动,连接
    Apache配置虚拟主机
  • 原文地址:https://www.cnblogs.com/Aiapple/p/7367835.html
Copyright © 2020-2023  润新知