这些模块默认会全部编译进Nginx,除非手工指定某个模块在configure时排除。
这个模块可以转发请求到其他的服务器。HTTP/1.0无法使用keepalive(后端服务器将为每个请求创建并且删除连接)。nginx为浏览器发送HTTP/1.1并为后端服务器发送HTTP/1.0,这样浏览器就可以为浏览器处理keepalive。
如下例:
location / { proxy_pass http://localhost:8000; proxy_set_header X-Real-IP $remote_addr;}
注意当使用http proxy模块(甚至FastCGI),所有的连接请求在发送到后端服务器之前nginx将缓存它们,因此,在测量从后端传送的数据时,它的进度显示可能不正确。
指令
proxy_bind
语法:proxy_bind address
默认值:none
使用字段:http, server, location
可用版本:≥ 0.8.22
示例:
proxy_bind 192.168.1.1;
在调用connect()前将上游socket绑定到一个本地地址,如果主机有多个网络接口或别名,但是你希望代理的连接通过指定的借口或地址,可以使用这个指令。
proxy_buffer_size
语法:proxy_buffer_size the_size
默认值:proxy_buffer_size 4k/8k
使用字段:http, server, location
设置从被代理服务器读取的第一部分应答的缓冲区大小。
通常情况下这部分应答中包含一个小的应答头。
默认情况下这个值的大小为指令proxy_buffers中指定的一个缓冲区的大小,不过可以将其设置为更小。
proxy_buffering
语法:proxy_buffering on|off
默认值:proxy_buffering on
使用字段:http, server, location
为后端的服务器启用应答缓冲。
如果启用缓冲,nginx假设被代理服务器能够非常快的传递应答,并将其放入缓冲区,可以使用 proxy_buffer_size和proxy_buffers设置相关参数。
如果响应无法全部放入内存,则将其写入硬盘。
如果禁用缓冲,从后端传来的应答将立即被传送到客户端。
nginx忽略被代理服务器的应答数目和所有应答的大小,接受proxy_buffer_size所指定的值。
对于基于长轮询的Comet应用需要关闭这个指令,否则异步的应答将被缓冲并且Comet无法正常工作。
proxy_buffers
语法:proxy_buffers the_number is_size;
默认值:proxy_buffers 8 4k/8k;
使用字段:http, server, location
设置用于读取应答(来自被代理服务器)的缓冲区数目和大小,默认情况也为分页大小,根据操作系统的不同可能是4k或者8k。
proxy_busy_buffers_size
语法:proxy_busy_buffers_size size;
默认值:proxy_busy_buffers_size proxy_buffer_size * 2;
使用字段:http, server, location, if
未知。
proxy_cache
语法:proxy_cache zone_name;
默认值:None
使用字段:http, server, location
设置一个缓存区域的名称,一个相同的区域可以在不同的地方使用。
在0.7.48后,缓存遵循后端的”Expires”, “Cache-Control: no-cache”, “Cache-Control: max-age=XXX”头部字段,0.7.66版本以后,”Cache-Control:“private”和”no-store”头同样被遵循。nginx在缓存过程中不会处理”Vary”头,为了确保一些私有数据不被所有的用户看到,后端必须设置 “no-cache”或者”max-age=0”头,或者proxy_cache_key包含用户指定的数据如$cookie_xxx,使用cookie的值作为proxy_cache_key的一部分可以防止缓存私有数据,所以可以在不同的location中分别指定proxy_cache_key的值以便分开私有数据和公有数据。
缓存指令依赖代理缓冲区(buffers),如果proxy_buffers设置为off,缓存不会生效。
proxy_cache_bypass
语法: proxy_cache_bypass line […];
默认值: off
使用字段: http, server, location
这个指令指定不使用缓存返回应答的条件,如果指定的变量中至少有一个为非空,或者不等于“0”,这个应答将不从缓存中返回:
proxy_cache_bypass $ cookie_nocache $ arg_nocache $ arg_comment; proxy_cache_bypass $ http_pragma $ http_authorization;
可以结合proxy_no_cache使用。
proxy_cache_key
语法:proxy_cache_key line;
默认值:$scheme$proxy_host$request_uri;
使用字段:http, server, location
指令指定了包含在缓存中的缓存关键字。
proxy_cache_key "$host$request_uri$cookie_user";
注意默认情况下服务器的主机名并没有包含到缓存关键字中,如果你为你的站点在不同的location中使用二级域,你可能需要在缓存关键字中包换主机名:
proxy_cache_key "$scheme$host$request_uri";
proxy_cache_methods
语法:proxy_cache_methods [GET HEAD POST];
默认值:proxy_cache_methods GET HEAD;
使用字段:http, server, location
GET/HEAD用来装饰语句,即你无法禁用GET/HEAD即使你只使用下列语句设置:
proxy_cache_methods POST;
proxy_cache_min_uses
语法:proxy_cache_min_uses the_number;
默认值:proxy_cache_min_uses 1;
使用字段:http, server, location
多少次请求后应答将被缓存,默认1。
proxy_cache_path
语法:proxy_cache_path path [levels=number] keys_zone=zone_name:zone_size [inactive=time] [max_size=size];
默认值:None
使用字段:http
指令指定缓存的路径和一些其他参数,缓存的数据存储在文件中,并且使用代理url的哈希值作为关键字与文件名。levels参数指定缓存的子目录数,例如:
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;
文件名类似于:
/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c
可以使用任意的1位或2位数字作为目录结构,如 X, X:X,或X:X:X e.g.: “2”, “2:2”, “1:1:2”,但是最多只能是三级目录。
所有活动的key和元数据存储在共享的内存池中,这个区域用keys_zone参数指定。
注意每一个定义的内存池必须是不重复的路径,例如:
proxy_cache_path /data/nginx/cache/one levels=1 keys_zone=one:10m;proxy_cache_path /data/nginx/cache/two levels=2:2 keys_zone=two:100m;proxy_cache_path /data/nginx/cache/three levels=1:1:2 keys_zone=three:1000m;
如果在inactive参数指定的时间内缓存的数据没有被请求则被删除,默认inactive为10分钟。
一个名为cache manager的进程控制磁盘的缓存大小,它被用来删除不活动的缓存和控制缓存大小,这些都在max_size参数中定义,当目前缓存的值超出max_size指定的值之后,超过其大小后最少使用数据(LRU替换算法)将被删除。
内存池的大小按照缓存页面数的比例进行设置,一个页面(文件)的元数据大小按照操作系统来定,FreeBSD/i386下为64字节,FreeBSD/amd64下为128字节。
proxy_cache_path和proxy_temp_path应该使用在相同的文件系统上。