nginx模块–proxy,upstream,header,stream

ngx_http_proxy_module

    proxy模块的作用:将请求传递给对应的服务器

    示例:

    location / {

        proxy_pass http://localhost:8080;

        proxy_set_header Host $host;

        proxy_set_header X-Real-IP $remote_addr;

    }

    1.proxy_pass URL;

    blob.png

    location /uri/ {

        proxy_pass http://172.18.18.123/admin/;

    }

    如果proxy_pass后面带了"/",则对应的uri则被替换为http://172.18.18.123/admin/

    如果proxy_pass后面没有带"/",则被替换为http://172.18.18.123/admin/uri

    如果location定义其uri时使用了正则表达式的模式,则proxy_pass之后必须不能使用uri

    用户请求时传递的uri将直接附加代理到的服务之后

    location ~|~* /uri/ {

        proxy_pass http://172.18.18.123;

    }

    blob.png

    blob.png

    blob.png

    

    2.proxy_set_header field value;

    blob.png

    设定发往后端主机的请求报文的请求首部的值;默认设置了 Host $proxy_host 和 Connection close

    也可以自己指定,如果前端有反代服务器,而又想在日志中捕获到源请求段的ip地址,那么就可以自行对首部进行设置proxy_set_header X-Real-IP(X-Forwarded-For) $remote_addr; 变量remote_addr里面存放的就是源请求端(真实客户端)的ip地址

    blob.png

    blob.png

    blob.png


    3.proxy_cache_path

 blob.png

    定义可用于proxy功能的缓存;它的作用域只能是http


    4.proxy_cache zone|off;

    blob.png            

    指明要调用的缓存,或关闭缓存机制,此处的zone的值为proxy_cache_path中给定的keys_zone的值


    5.proxy_cache_key string;

    blob.png

    缓存中用于"键"的内容


    6.proxy_cache_valid [code…] time;

    blob.png

    定义对特定响应码的相应内容的缓存时长;

    定义在http{…}中

    proxy_cache_path /var/cache/proxy_cache levels=1:1:1 keys_zone=cache:20m max_size=1g;

    定义在需要调用缓存功能的配置段,如server{…};

    proxy_cache cache;

    proxy_cache_key $request_uri;

    proxy_cache_valid 200 302 301 1h;

  proxy_cache_valid any 1m;

    blob.png

    blob.png

    blob.png

    

    7.proxy_cache_use_stale  

 blob.png

    如果后端服务器出现状况,nginx是可以使用过期的响应缓存,这条指令用于定义何种情况下允许开启此机制。

    updating参数允许nginx在正在更新缓存的情况下使用过期的缓存来作为响应,这样做可以是更新缓存数据时,访问源服务器的次数最少,在植入新的缓存条目时,如果想使访问源服务器的次数最少,可以使用proxy_cache_lock指令

    


    8.proxy_cache_methods

    blob.png

    定义能够使用代理缓存的方法,默认get和head方法


    9.proxy_hide_header

    blob.png

    默认nginx不会传递Date,Server,X-Pad,X-Accel参数给客户端,也可以自定义不传递给客户端的响应报文中的参数,如果想要传递,可以使用proxy_post_header


    10.proxy_connect_timeout

    blob.png

    定义一个与后端服务器连接超时时间,默认60s,但超时时间不能超过75s

    11.proxy_buffer_size 

    blob.png

    设置缓冲区大小为size,nginx从被代理的服务器读取响应时,使用该缓冲区保存响应的开始部分,这部分通常包含一个小小的响应头,该缓冲区大小默认等于proxy_buffers指令设置的一块缓冲区大小,但他也可以被设置为更小


    12.proxy_buffering

    blob.png

    是否启用缓冲功能


    13.proxy_buffers

    blob.png

    为每个连接设置缓冲区的数量为number,每块缓冲区的大小为size,这些缓冲区 用于保存从被代理的服务器读取的响应,每块缓冲区默认等于一个内存页的大小  


    14。proxy_busy_buffers_size

    blob.png

    当开启缓冲响应的功能以后,在没有全部读到响应的情况下,写缓冲到达一定大小时,nginx一定会向客户端发送响应,直到缓冲小于此值,这条指令用于设置此值。同时,剩余的缓冲区可以用于接收响应,如果需要,一部分内容将缓冲到临时文件,该大小默认是proxy_buffer_size和proxy_buffers指令设置单块缓冲大小的两倍


nginx_http_headers_module模块

    向由代理服务器响应给客户端的响应报文中添加自定义首部,或修改指定首部的值

    1.add_header 

    blob.png

    添加自定义首部

    add_header X-Via $server_addr  在响应报文首部中添加服务器端地址,可以是代理服务器   

    add_header X-Accel $server_name

    blob.png

    blob.png

    

    2.expires

    blob.png

    用于定义Expire或Cache-control首部的值


ngx_http_upstream_module

    该模块用来定义一组服务器,在对应的proxy_pass,fastcgi_pass,uwsgi_pass,scgi_pass和meecached_pass被引用到   


    1.upstream 

    blob.png

    定义后端服务器组,会引入一个新的上下文

    它只能位于http中

    

    2.server

    blob.png

    在upstream上下文中server成员以及相关参数,Context:upstream

    address的表示格式:

        unix:/path/to/some_sock_file

        IP[:port]

        HOSTNAME[:port]

    

    parameters:

        weight=number 权重,默认为1

        max_fails=number 失败尝试最大次数,超出此值,server将被标记为不可用

        fail_timeout=time 定义服务器标记为不可用状态的超时时长

        max_conns 当前的服务器的最大并发连接数

        backup 将服务器标记为备用,及所有服务器均不可用时,此服务器才启用

        down 将服务标记为不可用

blob.png

blob.png

blob.png


    3.least_conn

    blob.png

    最少连接次数,当server拥有不同的权重时其为wlc;

    

    4.ip_hash

    blob.png

    源地址hash调度算法

    blob.png

    blob.png


    5.hash

    blob.png

    基于指定的key的hash表来实现对请求的调度,此处的key可以为直接文本,变量或二者的结合

    作用:将请求分类,同一类请求将发往同一个upstream server

     如:hash $request_uri consistent; 基于uri的hash,对于相同的uri,将发往同一个upstream server

         hash $remote_addr; 基于请求的源地址hash,对于相同的地址的请求,将发往同一个upstream server


    6.keepalive

    blob.png    

    为每个worker进程保留的空闲的长连接数量

    

    7.least_time header|last_byte;

    blob.png

    最短平均响应时长和最少连接

    header:response_header;

    last_byte:full_response;

    仅 Nginx Plus有效


    9.health_check

    blob.png

    定义对后端主机的健康状态监测机制,只能用于location上下文

    可用参数:

        interval=time:监测频率,默认每个5秒钟

        fails=number:判断服务器状态转为失败需要检测的次数

        passes=number:判断服务其状态转为成功需要检测的次数

        uri=uri:判断其健康与否时使用的uri

        match=name:基于指定的match来衡量监测结果的成败

        port=number:使用独立的端口进行检测

    仅Nginx Plus有效

    

    10.match

    blob.png

    定义衡量某检测结果是否为成功的衡量机制

    专用指令:

        status:期望的响应码

            status CODE

            status ! CODE

            …

        header:基于响应报文的首部进行判断

            header HEADER=VALUE

            header HEADER ~ VALUE

            …

        body:基于响应报文的内容进行判断

            body ~ "pattern"

            body !~ "pattern"

        仅Nginx Plus有效


ngx_stream_core_module

    模拟反代基于tcp或udp的服务连接,即工作于传输层的反代或调度器

    

    1.stream

    blob.png

    定义stream相关的服务,它位于main的上下文中

    stream {

        upstream group {

            server 172.18.18.123:80;

            server 172.18.18.124:80;

        }

        server {

            listen 10.1.0.1:2121

            proxy_pass group;

        }

    }

blob.png

blob.png

blob.png

    2.listen    

blob.png

    定义监听的地址和端口

    listen 127.0.0.1:12345;

    listen *:12345;

    listen 12345; 同*:12345

    listen localhost:12345;

    listen unix:/var/run/nginx.sock;




原创文章,作者:Stupid_L,如若转载,请注明出处:http://www.178linux.com/55311

(0)
Stupid_LStupid_L
上一篇 2016-10-29 16:23
下一篇 2016-10-29 16:51

相关推荐

  • Linux的文件压缩、解压之tar的使用

    文件的压缩   一、压缩、解压缩及归档工具 压缩 解压 后缀(压缩后) file-roller 图形操作界面上的使用(略) compress 解压一:uncompress 或compress -d (注:使用上面的解压命令,实际上是在屏幕上打印解压的文件信息,并不是真正上解压到文件,所以需要在命令后面加上“重定向到指定的文件中”,方可完成解压。如:…

    Linux干货 2016-08-18
  • sed命令应用详解

    sed应用详解 sed是文本处理处理工具“三大剑客”之一,它 是一种流编辑器,sed一次只处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(patternspace),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。sed不会修改原文件内容,除非你使用重定向存储输出。…

    Linux干货 2016-08-11
  • 内核相关

    内核两大流派单内核微内核 grub分为三个阶段:1阶段 1.5阶段 2阶段 内核阶段 通过/proc/cmdline找到根并挂载2阶段内容是放在/boot/grub目录下Centos6 实验:丢失除grub.conf外所有文件没有修复过的时候/boot/grub下文件是放在磁盘上某个位置的修复过一次后/boot/grub下文件就起作用了,一旦执行过grub-…

    Linux干货 2018-01-03
  • 第三周练习

    列出当前系统上所有已经登录的用户的用户名,注意:同一用户登录多次,只显示一次。                     ~]# who | cut -d" " …

    Linux干货 2016-11-09
  • 用shell脚本实现每天定时收集全网日志到一台服务器

    需求 现在公司有这样一个需求,需要收集每天全网运行业务的设备上的某个特定目录底下的日志到一台服务器(这台服务器我们简称logserver),这并在这台logserver上生成以日期为名字的目录 解决思路: 在logserver的crontab里设置两个脚本,在当日晚上23:30执行脚本1收集当日即将被删除的全网脚本;在并在早上8:30执行脚本2,收集昨日全网…

    Linux干货 2015-07-27
  • 文件共享服务之NFS

    文件共享服务之NFS 文件共享服务之NFS 一、什么是NFS及NFS的工作流程 二、NFS发展及问题 三、NFS简单部署 一、什么是NFS及NFS的工作流程 NFS(Network File System,网络文件系统)  NFS是借助于RPC来实现功能的 RPC:(Remote  Procedure  Call  p…

    Linux干货 2016-04-19