Nginx代理功能(未完)

Nginx代理模块允许传递请求到其它的服务器。

指令
Syntax:    proxy_bind address | off;
Default:    —
Context:    http, server, location
This directive appeared in version 0.8.22.

强制将与代理本机连接绑到指定IP地址,通俗来讲就是配置了多个基于名称或者基于IP的主机情况下,如果希望代理连接由指定的主机处理,就可以使用该指令进行配置。
当值为off,系统自动分配本机IP地址。

Syntax:    proxy_buffer_size size;
Default:    proxy_buffer_size 4k|8k;
Context:    http, server, location
设置第一次从代理服务器收到的响应的buffer的大小。这部分通常包含小的响应头部。默认,buffer大小等于内存页大小。可以是4K或8K,依赖于系统平台。当然也可以更小。

Syntax:    proxy_buffering on | off;
Default:    proxy_buffering on;
Context:    http, server, location
开启或关闭代理服务器的响应buffer功能。当nginx收到代理服务器的响应时候,它通过proxy_buffer_size和proxy_buffer指令设置。如果正响应没有合适的内存,部分可以保存在temporary_file里面。写入内存则通过proxy_max_temp_file_size 和 proxy_temp_file_write_size指令来设置。
当buffering关闭的时候,请求传递到客户端是同步的,当nginx收到响应的时候,立即回复。收到响应数据的最大大小可以被proxy_buffer_size指令设置。
bufferring可以开启或禁止传递yes或no在”X-Accel-Buffering”响应头部中设置。这个能力可以使用proxy_ignore_headers指令禁止。

Syntax:    proxy_buffers number size;
Default:    proxy_buffers 8 4k|8k;
Context:    http, server, location
类似于gzip_buffers不在叙述。

Syntax:    proxy_busy_buffers_size size;
Default:    proxy_busy_buffers_size 8k|16k;
Context:    http, server, location
该指令限制同时处于busy状态的buffer大小,默认size为两倍的proxy_buffer_size和proxy_buffer指令的大小。

Syntax:    proxy_cache zone | off;
Default:    proxy_cache off;
Context:    http, server, location
定义一个用于缓存的的共享内存区间,同样的区间可以被用在几个位置。参数值可以包含变量。off参数禁止缓存。

Syntax:    proxy_cache_bypass string ...;
Default:    —
Context:    http, server, location
定义一个条件,什么响应不会从cache中获取。如果字符串参数至少一个值而且不为空,那么响应不会从cache中获取。
proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
proxy_cache_bypass $http_pragma    $http_authorization;
可以同proxy_no_cache指令一起使用。

Syntax:    proxy_cache_convert_head on | off;
Default:    proxy_cache_convert_head on;
Context:    http, server, location
This directive appeared in version 1.9.7.
开启或禁止或禁止HRAD方法会话。当会话被禁止了,cache_key应该被配置为包含$request_method

Syntax:    proxy_cache_key string;
Default:    proxy_cache_key $scheme$proxy_host$request_uri;
Context:    http, server, location
定义缓存的key,例如。
proxy_cache_key "$host$request_uri $cookie_user";
默认这个指令的值紧跟着字符串
proxy_cache_key $scheme$proxy_host$uri$is_args$args;

Syntax:proxy_cache_lock on | off;
Default:proxy_cache_lock off;
Context:http, server, location
当开启之后,只有一个请求在一段时间内被允许填充新的cache元素,根据proxy_cache_key指令来标示是什么cache传递到代理服务器。其它相同cache的请求要么等待cache中的响应,要么锁住这个cahe释放,根据proxy_cache_lock_timeout指令来设置。

Syntax:    proxy_cache_lock_age time;
Default:    proxy_cache_lock_age 5s;
Context:    http, server, location
如果最近的请求传递到被代理的服务器来填充新的cache元素,还没有完成,一个或更多请求可以被传递到代理服务器。

Syntax:    proxy_cache_lock_timeout time;
Default:    proxy_cache_lock_timeout 5s;
Context:    http, server, location
设置proxy_cahce_lock的超时时长,当time过期的时候,这个请求会传递到被代理的服务器,不管怎么样,响应不会被cached。
Before 1.7.8, the response could be cached.

Syntax:    proxy_cache_methods GET | HEAD | POST ...;
Default:    proxy_cache_methods GET HEAD;
Context:    http, server, location
客户端的请求方法列出在这个指令中,然后想要被cached,”GET”和”HEAD”方法一直被加入这个list中,尽管官方要求精确的指定方法。

Syntax:    proxy_cache_min_uses number;
Default:    proxy_cache_min_uses 1;
Context:    http, server, location
在响应数据被cached之后,发送给客户端的次数。

Syntax:    proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
Default:    —
Context:    http
设置cahe的路径和其它参数,cache数据存储在文件里面,这个文件名是在cache中为应用MD5函数的结果。levels参数定义cache的层级关系。例如,在下面的配置中
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;
文件名看起来就像这样
/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c

Syntax:    proxy_cache_purge string ...;
Default:    —
Context:    http, server, location
This directive appeared in version 1.5.7.
定义一个条件,什么请求会被看做清除cache的请求。类似于proxy_cache_bypass。
案例:
proxy_cache_path /data/nginx/cache keys_zone=cache_zone:10m;

map $request_method $purge_method {
    PURGE   1;
    default 0;
}

server {
    ...
    location / {
        proxy_pass http://backend;
        proxy_cache cache_zone;
        proxy_cache_key $uri;
        proxy_cache_purge $purge_method;
    }
}

Syntax:    proxy_cache_revalidate on | off;
Default:    proxy_cache_revalidate off;
Context:    http, server, location
开启cache重用功能,如果请求使用了”If-Modified-Since”和”If-None-Match”头部元素。

Syntax:    proxy_cache_valid [code ...] time;
Default:    —
Context:    http, server, location
为不同的响应码设置不同的cache时间
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404      1m;

指令实在是太多,请参考原文
http://nginx.org/en/docs/http/ngx_http_proxy_module.html

实例:
upstrean videobackend
{
    server 192.168.1.2:80;
    server 192.168.1.3:80;
    server 192.168.1.4:80;
}
upstream filebackend
{
    server 192.168.1.5:80;
    server 192.168.1.6:80;
    server 192.168.1.7:80;
}
server
{
    listen 80;
    server_name www.myweb.com
    index index.html index.htm;
    location /video/ {
        proxy_pass http://videobackend;
        proxy_set_header host $host    ;
        ……
    }
    location /file/ {
        proxy_pass http://filebackend;
        proxy_set_header    X-Real-IP $remote_addr;
        proxy_set_header    X-Forward-For    $proxy_add_x_forwarded_for;
        ……
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章