13 Nginx的标准http模块

http的核心模块

1.alias

语法:alias file-path | direcotry-path

默认值:no

使用环境:location

该指令用于在URL和文件系统路径之间实现映射。例如:

location /i/ 

{

alias /spool/w3/images/;

}

当我们访问URL地址/i/top.gif会自动返回文件/spool/w3/images/top.gif。

注意,在被替换的路径中,可以使用变量。但是在含有正则表达式的location中,不能使用alias指令,如果想完成功能,必须使用rewrite。

 

2.client_body_in_file_only

语法:client_body_in_file_only on|off

默认值:off

使用环境:http,server,location

该指令允许将一个客户端的请求内容记录到一个文件中,该文件在请求完成后不会被删除。在内置的perl中,该指令可以用于调试$r->request_body_file方法。

 

3.client_body_in_single_buffer

语法:client_body_in_single_buffer on|off

默认值:off

使用环境:http,server,location

该指令指定是否保持整个内容在一个单一的客户端请求缓冲区中,该指令在使用变量$request_body时被推荐使用。

 

4.client_body_buffer_size

语法:client_body_buffer_size size

默认值:8K/16K

使用环境:http,server,location

该指令指定客户端请求内容的缓冲区大小。如果客户端请求内容大于缓冲区,整个请求内容或部分请求内容将被写入临时文件。

 

5.client_body_temp_path

语法:client_body_temp_path dir [level1 [level2 [level3]]]

使用环境:http,server,location

该指令用于指定存放请求内容临时文件的目录。缓存目录最多支持3层子目录。例如:

client_body_temp_path /spool/nginx/client_temp 1 2;

则目录结构类似于:/spool/nginx/client_temp/2/00002323

 

 

6.client_body_timeout

语法:client_body_timeout time

默认值:60

使用环境:http,server,location

该指令用于设置读取客户端请求内容的超时时间。如果超过该指令设置的时间,Nginx将返回"Request time out"错误信息(HTTP状态码为408)。

 

7.client_header_buffer_size

语法:client_header_buffer_size size

默认值:1K

使用环境:http,server

该指令用于设置客户端请求的Header头缓冲区大小。对大多数请求,1KB大小足够了,但是对于Cookie内容较大的请求来说,可能需要加大。

 

8.client_header_timeout

默认值是60,使用环境http和server。主要设置读取客户端请求header头信息超时时间。如果超时,则返回408.

 

9.client_max_body_size

默认值是1MB,该指令设置允许接受的客户端请求内容的最大值,即客户端请求header头信息里面的content-length。如果服务器提供上传1MB以上的大文件等操作,则需要加大该值。

 

10.directio

默认值是off,该指令用于设置一个文件大小,当读取文件超过该大小,将直接通过内存访问该文件,不经过cpu而直接从内存存取数据。该指令会使sendfile功能失效,对于大文件来说,使用该指令是好的。

 

11.error_page

语法:error_page code [code ...] [= |=answer-code] uri

使用环境:http,server,location,if in location

该指令用于设置如果出现指定的http错误状态码,则返回给客户端显示的对应的URI地址。示例如下:

error_page 404 /404.html;

error_page 502 503 504 /50x.html

如果响应错误代码的页面是php等fastcgi程序,则最好在error_page中加上=号。

error_page 404 = /404.php;

 

12.limit_except

语法:limit_except methods {....}

默认值:no

使用环境:location

该指令用于限制HTTP方法访问location中的内容,示例如下:

limit_except GET 

{

allow 192.168.1.0/32;

deny all;

}

 

13.limit_rate

语法:limit_rate speed

默认值:no

使用环境:http,server,location,if in location

该指令主要用来限速,限速单位是"字节数/秒",一般在提供HTTP下载等应用中会用到该指令。限速只对一个连接有效,如果客户端开启两个连接下载,下载速度将是限速值的两倍。

例如:限制每个连接的下载速度为100KB/秒

limit_rate 100k;

14.limit_rate_after

该指令可以设置一个字节数,下载的字节数大于该值后,limit_rate指令的限速功能将起效。对于mp3在线播放,http方式的flash视频等有不错的效果。

例如:下载的文件字节数超过1MB后,限速为100KB/秒。

limit_rate_after 1m;

limit_rate 100k;

 

15.listen

该指令默认值是listen 80,使用环境只能在server。用于设置虚拟主机监听的服务器地址和端口号。

如果要监听IPV6的地址,则示例如下:

listen [::]:8000;

listen [fe80::1];

如果要虚拟主机同时支持http和https:

listen 80;

listen 443 default ssl;

 

16.location 

语法:location [= | ~ | ~* | ^~] /uri/{...}

默认值:no

使用环境:server

该指令允许对不同的URI进行不同的配置,既可以使用字符串,也可以使用正则表达式。使用正则表达式,须使用以下前缀:

a. ~*  表示不区分大小写匹配。

b.  表示区分大小写匹配。

在匹配过程中,Nginx将首先匹配字符串,然后再去匹配正则表达式。

c.  ^~ 表示URI以某个常规字符串开头,理解为匹配URL路径即可。Nginx不对url做编码,因此请求/static/20%/aa可以被规则为 ^~ /static/ /aa(注意是空格)。

d.  表示精确的URI匹配。

17.log_not_found

该指令默认值是on。用来启用或禁止404错误日志,这个指令可以用来禁止Nginx记录找不到robots.txt和favicon.ico这类文件的错误信息。

 

18.open_file_cache 设置打开文件的缓存

open_file_cache_errors 设置是否开启搜索文件的缓存错误

open_file_cache_min_uses 指定在open_file_cache指令设置的时间内文件的最小使用数,如果打开的文件超过该数量,则文件描述符会保持缓存中的打开状态。

open_file_cache_valid 该指令用于指定检查open_file_cache指令中条款有效性时间。

 

19.port_in_redirect

默认值是on。用于允许或阻止Nginx重定向过程中的端口操作。如果port_in_redirect为on,Nginx在请求重定向时则不会加上端口。

 

20.root

默认值是root html。该指令主要用来指定请求的文档根目录。例如,配置内容为location /i/ {root /spool/w3;} 时,请求URI地址"/i/top.gif"将返回文件"/spool/w3/i/top.gif"的内容给客户端。

 

21.send_timeout

默认值是60。该指令用于设置发送给客户端的应答超时时间。超时时间是指进行了两次TCP握手,还没有转化为established状态的时间。如果超过这个时间客户端没有响应,Nginx则关闭连接。

 

22.sendfile

默认值是off。该指令启用或禁用sendfile()函数。sendfile()函数是作用于数据拷贝在两个文件描述符之间的操作函数,这个操作在内核中进行,所以称为"零拷贝"。sendfile函数read和write函数要高效得多。

 

 

server指令

使用环境在http。用于配置虚拟主机,在server{...}中,使用listen指令为一个虚拟主机设置监听的IP和端口,使用server_name指令来设置不同的虚拟主机名称。

 

23.server_name

该指令主要完成以下两项操作:

1.根据客户端请求Header头信息中的Host域名,来匹配该请求应该由哪个虚拟主机配置server{...}来处理。

2.如果server_name_in_redirect设置为on,设置的主机名将被用于HTTP重定向。

 

 

24.server_name_in_redirect

默认值是on。如果设置为on,Nginx将使用server_name指令设置的第一个名称来做重定向。

 

25.tcp_nodelay

默认值是on。该指令允许或禁止使用套接字选项TCP_NODELAY,仅适用于keep-alive连接。默认情况下数据发送时,内核并不会马上发送,它可能等待更多的字节组成一个包,以提高IO发送的效率。但是每次只发送很少字节的程序中,使用TCP_NODELAY时等待会比较长。请根据实际情况选择开启。

 

26.tcp_nopush

默认值是off。该指令允许或禁止使用TCP_CORK套接字选项。该选择仅在sendfile开启的时候才起作用。

 

27.try_files

语法:try_files param1 [param2 ... paramN] fallback

默认值:none

使用环境:location

该指令用于告诉Nginx测试每个文件是否存在,并且使用首先找到的文件作为URI。如果没有找到文件,则调用location fallback。fallback是一个请求参数,它可以是一个命名的location,也可以是任何可能是URI。例如:

location / 

{

try_files index.html index.htm @fallback;

}

location @fallback

{

root /var/www/error;

index index.html;

}

 

 

HTTP核心模块中可以使用的变量

Nginx HTTP 核心模块支持一些与Apache变量名称相同的内置变量,例如:$http_user_agent,$http_cookie,此外还支持一些Nginx特有的其他变量:

$arg_PARAMETER 包含了当查询字符串时,GET请求可变参数的值。

$args 等于请求行中的参数。

$content_length 等于客户端请求头中的content-length值。

$content_type 等于客户端请求头中的content-type值。

$cookie_COOKIENAME 客户端请求header头中的cookie变量。

$document_root 等于当前请求所属的root指令设置的文档根目录路径。

$document_uri 这个变量与$uri类似。

$uri 等于当前请求的URI(不带参数)。

$http_HEADER  客户端请求header头中的变量。将客户端请求头每行名称中的横线"-"换成下划线"_",大写字母转成小写字母,前缀加上"$http_",即为该名称对应的变量。例如客户端请求头中cookie行的内容为"Accept-Encoding:gzip,deflate",那么我们在Nginx有一个变量$http_accept-encoding,值为gzip,deflate。类似的变量还有:$http_user_agent,$http_refrer....。

$remote_addr 客户端IP地址。

$remote_port 客户端端口。

$remote_user 客户端用户名,Auth Basic模块中会使用到该变量。

$request_filename 当前请求的文件路径,由root,alias及URI请求生成。

$request_body 包含请求的body主体内容。在使用proxy_pass或fastcgi_pass指令的location中,意义比较大。

$request_body_file 客户端请求主题的临时文件名。

$request_method HTTP请求的动作,常用的动作为GET或POST。

$request_uri 带有完整参数的URI。

$server_name 服务器主机名。

$server_port 服务器端口。

$server_protocol 请求采用的协议,通常该变量的值为HTTP/1.0或HTTP/1.1。

 

 

HTTP Access模块

HTTP Access模块提供一个简单的基于host名称的访问控制。通过该模块,可以允许或禁止指定的IP地址或IP段访问某些虚拟主机或目录。例如:

location /

{

deny 192.168.1.1;

allow 192.168.1.0/24;

allow 10.1.1.0/16;

deny all;

}

 

HTTP Auth Basic模块

该模块采用基于HTTP基本身份验证的用户名和密码登陆方式来保护你的虚拟主机或目录。例如:该指令弹出用户名和密码的登陆框。

location /admin/

{

auth_basic "username";

auth_basic_user_file "password_file";

}

注:如果设置auth_basic off,则关闭HTTP基本身份验证。

 

HTTP Autoindex模块

该模块用于提供自动目录列表。该模块只有在找不到默认的index文件时才启用。

autoindex on ;指令用于允许和禁止自动目录列表。

 

 

HTTP Browser模块

该模块可以根据客户端"User-agent"请求头中的信息创建变量。

 

 

HTTP Fcgi模块

该模块用于设置Nginx与Fastcgi进程交互,并通过传递参数来控制FastCGI进程工作。例如:

location / 

{

fastcgi_pass localhost:9000;

fastcgi_index index.php;

 

fastcgi_param SCRIPT_FILENAME /home/www/php$fastcgi_script_name;

fastcgi_param QUERY_STRING $query_string;

fastcgi_param REQUEST_METHOD $request_method;

fastcgi_param CONTENT_TYPE $content_type;

fastcgi_param CONTENT_LENGTH $content_length;

}

 

缓冲示例代码如下:

http

{

fastcgi_cache_path /path/cache levels=1:2 keys_zone=NAME:10m inactive=1d clean_time=2h;

 

server

{

location /

{

fastcgi_pass http://127.0.0.1;

fastcgi_cache NAME;

fastcgi_cache_valid 200 302 1h;

fastcgi_cache_valid 301 1d;

fastcgi_cache_valid any 1m;

fastcgi_cache_min_uses 1;

fastcgi_cache_use_stale error timeout invalid_header http_500;

}

}

}

 

Fastcgi的相关指令

a.fastcgi_buffers

语法:fastcgi_buffers number size;

默认值:fastcgi_buffers 8 4K/8K;

该指令读取fastcGI进程返回信息的缓冲区数量和大小。默认情况下一个缓冲区的大小应该和操作系统的页大小一样。

我们可以通过getconf PAGESIZE 来查看页大小。

b.fastcgi_buffer_size

语法:fastcgi_buffer_size size;

默认值:fastcgi_buffer_size 4K/8K;

该指令设置FastCGI服务器相应头部的缓冲区大小。通常情况缓冲区大小设置等于fastcgi_buffers设置的缓冲区大小。

 

c.fastcgi_cache

语法:fastcgi_cache zone;

默认值:off

该指令用来设置缓存在共享内存中的名称。一款区域可能被几个地方引用。

 

d.fastcgi_cache_methods

语法:fastcgi_cache_methods [GET HEAD POST];

默认值:fastcgi_cache_methods GET HEAD;

该指令用于设置哪些HTTP请求可以被缓存。

 

e.fastcgi_index

语法:fastcgi_index file

默认值:none

如果请求的fastcgi uri以'/'斜线结束,该指令设置的文件会被附加到URI的后面并保存在变量$fastcgi_script_name中。

 

f.fastcgi_hide_header

默认情况,Nginx不会将FastCGI进程返回的status等信息。如果需要得到这些信息,就需要使用fastcgi_pass_header。

 

g.fastcgi_param

语法:fastcgi_param parameter value

默认值:none

该指令指定的参数,将被传递给FastCGI-server。它可能使用字符串、变量及其他的组合来作为参数值。如果不在此制定参数,它就会继承外层设置;如果在此设置参数,将会清楚外层设置,仅启用本层设置。

例如:一个最简单的例子

fastcgi_param SCRIPT_FILENAME /home/www/php$fastcgi_script_name;

fastcgi_param QUERY_STRING $query_string;

 

如果要处理POST,那么这3个附加参数是必要的:

fastcgi_param REQUEST_METHOD $request_method;

fastcgi_param CONTENT_TYPE $content_type;

fastcgi_param CONTENT_LENGTH $content_length;

 

h.fastcgi_pass

用于指定FastCGI服务器监听的端口或Unix套接字。

 

i.fastcgi_read_timeout

默认值是60。该指令用于设置upstream模块等待FastCGI进程发送数据的超时时间,默认是60秒。如果需要执行较长时间FastCGI程序,则须更改此值。

 

j.fastcgi_ignore_client_abort

默认值是off。如果客户端中断服务器的请求,则该指令可决定当前FastCGI请求是否中断。

 

 

Geo模块

geo模块主要用于做全局负载均衡,可以根据不同的客户端IP访问到不同的服务器。一些针对不同地区的客户,使用不同的服务器去处理需求。

 

 

Gzip模块

Gzip模块主要用于对返回客户端的网页采用gzip进行压缩输出。目前基本浏览器都支持gzip和deflate两种压缩格式,如果浏览器支持gzip压缩,就会在HTTP请求头中发送一行"Accept-Encoding:gzip,deflate",这时候Nginx服务器可以输出经过gzip压缩后的页面给浏览器,浏览器再解压。这种方式可以将网络线路上传输的大量数据消减60%以上,不仅节省了服务器带宽,同时加速了用户的下载速度和体验。

Gzip指令

a.gzip

默认值是off。该指令用于开启或关闭gzip模块。

 

b.gzip_buffers

语法:gzip_buffers number size

默认值:gzip_buffers 4 4k/8k

设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。例如4 4k代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。

 

c.gzip_comp_level

默认值是1,可以设置1~9的值。代表gzip压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢(传输快但比较消耗CPU)。

 

d.gzip_min_length

默认值是0。设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取。默认是0,即不管页面多大都压缩。建议设置成大于1k的字节数,小于1k可能会越压越大。设置为1k即:gzip_min_length 1024;

 

e.gzip_proxied

默认值:off。Nginx作为反向代理的时候启用,开启或关闭后端服务器返回的结果,匹配的前提是后端服务器必须要返回包含"Via"的header头。

off 关闭所有的代理结果数据的压缩。

any 无条件启用压缩。

expired  如果header头中包含"Expires"信息,则启用压缩。

no-cache  如果header头中包含"Cache-Control:no-cache"信息,则启用压缩。

no-store  如果header头中包含"Cache-Control:no-store"信息,则启用压缩。

private  如果header头中包含"Cache-Control:private"信息,则启用压缩。

no_last_modified 如果header头中不包含"Last-Modified",则启用压缩。

no_etag  如果header头中不包含"ETag",则启用压缩。

auth  如果header头中包含"Authorization",则启用压缩。

 

f.gzip_types

默认值是:gzip_types text/html;

匹配mime类型进行压缩,(无论是否指定)"text/html"类型总会被压缩。

例如:如果你希望压缩常规文件类型,可以代码写成如下

http

{

include conf/mime.types;

gzip on;

gzip_min_length 1000;

gzip_buffers 4 8k;

gzip_http_version 1.1;

gzip_types text/plain application/x-javascript text/css text/html application/xml;

}

 

 

 

HTTP Headers模块

这一组指令主要用来设置Nginx返回网页内容给用户时,附加的Header头信息。

a.add_header

语法:add_header name value

当Http应答状态码为200,204,301,302或304的时候,增加指定的Header头。

 

b.expire 

语法:expires [time | epoch | max | off]

使用本指令可以控制HTTP应答中的"Expires"和"Cache-Control"Header头信息,起到控制浏览器端页面缓存的作用。

 

HTTP Index模块

index指令用来指定做默认文档的文件名,可以在文件名处使用变量。如果您指定了多个文件,那么从做到右按顺序查找。例如:

index index.html index.$geo.html /index.html

 

HTTP Referer模块

HTTP Referer是Header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器借此可以获得一些信息用于处理,例如防止未经允许的网站盗链图片、文件等。因为Referer头信息可以伪装,所以Referer信息并非100%可靠。例如:

location /phtots/

{

valid_referers none blocked www.mydomain.com mydomain.com;

if($invalid_referer)

{

return 403;

}

}

 

valid_referers指令

语法:valid_referers [none | blocked | server_names] ...

默认值:none

使用环境:server,location

该指令会根据Referer Header头的内容分配一个值为0或1的给变量$invalid_referer。如果Referer Header头不符合valid_referers指令设置的有效Referer,变量$invalid_referer将被设置为1。

参数意思:

none:表示无Referer值的情况。

blocked:表示Referer值被防火墙伪装。

server_names:表示一个或多个主机名称,server_names中可以使用通配符"*"。

 

 

HTTP Limit Zone模块

该模块用于针对条件,进行会话的并发连接数控制。例如限制每个IP的并发连接数等。例如:

http

{

limit_zone one $binary_remote_addr 10m;

server

{

location /download/

{

limit_conn one 1;

}

}

}

 

limit_zone指令:

语法:limit_zone zone_name $variable memory_max_size,使用环境在http。该指令定义一个数据区,其中记录会话状态信息。$zone_name定义会话区名称;$variable定义判断会话的变量;memory_max_size定义内存记录区的总容量。

 

limit_conn指令:

语法:limit_conn zone_name max_clients_per_ip,使用环境http,server,location。该指令用于指定一个会话最大的并发连接数,当超过指定的最大并发连接数时,服务器将返回"server unavailable (503)"。

 

 

HTTP Limit Req模块

该模块允许你对Session会话、单个客户端IP地址,限制指定单位时间内的并发请求数。你可以在一定程度上减轻对应用服务器的DOS恶意攻击。例如:

http

{

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

server

{

location /search/

{

limit_req zone=one burst=5;

}

}

}

 

limit_req_zone指令:

语法:limit_req_zone $session_variable zone=name:size rate=rate,使用环境http。该指令用于定义一块内存存储区,用来存储Session会话状态,Session的变量由指定的变量构成,通常可以设置为存储客户端IP的变量$binary_remote_addr。

例如:limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

在本例中,为Session会话状态分配了一个名为one的10M内存存储区,限制了每秒只接受一个IP的一次请求(1 Request/Sec)。

 

limit_req指令:

语法:limit_req zone=zone burst=burst [nodelay],使用环境http,server,location。

该指令用于指定使用的内存存储区名称,以及最大的突发请求数(burse)。

 

HTTP Proxy模块

该模块用于转发请求到其他服务器。Keep-alive是指在HTTP/1.1协议中,同一个连接中发出和接受多次HTTP请求,节省了创建TCP连接过程的时间开销。

HTTP Proxy指令

a.proxy_buffer_size

语法proxy_buffer_size size,默认值proxy_buffer_size 4k/8k。

该指令用于设置从被代理服务器获取的第一部分应答信息的缓冲区大小,这个缓存区间会保存用户的头信息以供Nginx进行规则处理。

 

 

b.proxy_buffers

默认值proxy_buffers 8 4k/8k。该指令用于设置从被代理服务器读取应答信息的缓存区数目和大小。

 

c.proxy_busy_buffers_size

默认值proxy_busy_buffers_size [#proxy_buffers]*2。系统很忙的时候可以申请更大的proxy_buffers缓冲区。

 

proxy_cache相关指令集

proxy_cache相关指令集包含Proxy_cache,proxy_cache_path,proxy_cache_methods,proxy_cache_min_uses,proxy_cache_valid,proxy_cache_use_stale等。在前面的第9章已经有说明,请翻阅。

 

d.proxy_connect_timeout

设置跟后端服务器连接的超时时间。该时间不是服务器返回页面的时间,而是发起握手等候响应的超时时间。

 

e.proxy_ignore_client_abort

默认值是off。如果客户端自身终止请求,防止中断代理请求。

 

f.proxy_max_temp_file_size

默认值1G。该指令用于设置当网页内容大于代理内存缓冲区的时候,临时文件大小的最大值。如果文件大于这个值,它将从upstream服务器同步地传递请求,而不是缓冲到磁盘。

 

g.proxy_next_upstream

默认值:proxy_next_upstream error timeout。该指令用于设置当在哪种情况下,将请求转发到下一台服务器。在upstream负载均衡代理服务器池中,假设后端的一台服务器无法访问或返回错误代码时,可以使用该指令将请求转发到下台服务器。

 

h.proxy_pass

语法:proxy_pass url。该指令用于设置被代理服务器端口或套接字,以及URI。

 

i.proxy_pass_header

语法:proxy_pass_header the_name
 使用字段:http, server, location
 这个指令允许为应答转发一些隐藏的头部字段。
 如:

location / {

  proxy_pass_header X-Accel-Redirect;

}

 

 

j.proxy_pass_request_body

语法:proxy_pass_request_body [ on | off ] ;
 默认值:proxy_pass_request_body on;
 使用字段:http, server, location
 可用版本:0.1.29
 不管什么情况都将请求实体通过代理。 通常一直处于on状态。

 

k.proxy_pass_request_headers

语法:proxy_pass_request_headers [ on | off ] ;
 默认值:proxy_pass_request_headers on;
 使用字段:http, server, location
 可用版本:0.1.29
 不管什么情况都将请求头部通过代理。
 通常一直处于on状态。

 

l.proxy_redirect

语法:proxy_redirect [ default|off|redirect replacement ]
 默认值:proxy_redirect default
 使用字段:http, server, location
 如果需要修改从被代理服务器传来的应答头中的”Location”和”Refresh”字段,可以用这个指令设置。
 假设被代理服务器返回Location字段为: http://localhost:8000/two/some/uri/
 这个指令:

proxy_redirect http://localhost:8000/two/ http://frontend/one/;

将Location字段重写为http://frontend/one/some/uri/
 在代替的字段中可以不写服务器名:

proxy_redirect http://localhost:8000/two/ /;

这样就使用服务器的基本名称和端口,即使它来自非80端口。
 如果使用“default”参数,将根据location和proxy_pass参数的设置来决定。
 例如下列两个配置等效:

location /one/ {

  proxy_pass       http://upstream:port/two/;

  proxy_redirect   default;

}

 

location /one/ {

  proxy_pass       http://upstream:port/two/;

  proxy_redirect   http://upstream:port/two/   /one/;

}

在指令中可以使用一些变量:

proxy_redirect   http://localhost:8000/    http://$host:$server_port/;

这个指令有时可以重复:

  proxy_redirect   default;

  proxy_redirect   http://localhost:8000/    /;

  proxy_redirect   http://www.example.com/   /;

参数off将在这个字段中禁止所有的proxy_redirect指令:

  proxy_redirect   off;

  proxy_redirect   default;

  proxy_redirect   http://localhost:8000/    /;

  proxy_redirect   http://www.example.com/   /;

利用这个指令可以为被代理服务器发出的相对重定向增加主机名:

proxy_redirect   /   /;

 

m.proxy_read_timeout

语法:proxy_read_timeout time
 默认值:proxy_read_timeout 60s
 使用字段:http, server, location
 决定读取后端服务器应答的超时时间,单位为秒,它决定nginx将等待多久时间来取得一个请求的应答。超时时间是指完成了两次握手后并且状态为established的超时时间。
 相对于proxy_connect_timeout,这个时间可以扑捉到一台将你的连接放入连接池延迟处理并且没有数据传送的服务器,注意不要将此值设置 太低,某些情况下代理服务器将花很长的时间来获得页面应答(例如如当接收一个需要很多计算的报表时),当然你可以在不同的location里面设置不同的 值。
 可以通过指定时间单位以免引起混乱,支持的时间单位有”s”(秒), “ms”(毫秒), “y”(年), “M”(月), “w”(周), “d”(日), “h”(小时),和 “m”(分钟)。
 这个值不能大于597小时。

 

n.proxy_redirect

语法:proxy_redirect [ default|off|redirect replacement ];
 默认值:proxy_redirect default;
 使用字段:http, server, location
 这个指令为被代理服务器应答中必须改变的应答头:”Location”和”Refresh”设置值。
 我们假设被代理的服务器返回的应答头字段为:Location: http://localhost:8000/two/some/uri/
 指令:

proxy_redirect http://localhost:8000/two/ http://frontend/one/;

会将其重写为:Location: http://frontend/one/some/uri/
 在重写字段里面可以不使用服务器名:

proxy_redirect http://localhost:8000/two/ /;

这样,默认的服务器名和端口将被设置,端口默认80。
 默认的重写可以使用参数default,将使用location和proxy_pass的值。
 下面两个配置是等价的:

location /one/ {

  proxy_pass       http://upstream:port/two/;

  proxy_redirect   default;

}

 

location /one/ {

  proxy_pass       http://upstream:port/two/;

  proxy_redirect   http://upstream:port/two/   /one/;

}

同样,在重写字段中可以使用变量:

proxy_redirect   http://localhost:8000/    http://$host:$server_port/;

这个指令可以重复使用:

proxy_redirect   default;

proxy_redirect   http://localhost:8000/    /;

proxy_redirect   http://www.example.com/   /;

参数off在本级中禁用所有的proxy_redirect指令:

proxy_redirect   off;

proxy_redirect   default;

proxy_redirect   http://localhost:8000/    /;

proxy_redirect   http://www.example.com/   /;

这个指令可以很容易的将被代理服务器的服务器名重写为代理服务器的服务器名:

proxy_redirect   /   /;

proxy_redirect_errors

不推荐使用,请使用 proxy_intercept_errors。

 

o.proxy_send_lowat

语法:proxy_send_lowat [ on | off ]
 默认值:proxy_send_lowat off;
 使用字段:http, server, location, if
 设置SO_SNDLOWAT,这个指令仅用于FreeBSD。

 

p.proxy_send_timeout

语法:proxy_send_timeout seconds
 默认值:proxy_send_timeout 60s
 使用字段:http, server, location
 设置代理服务器转发请求的超时时间,单位为秒,同样指完成两次握手后的时间,如果超过这个时间代理服务器没有数据转发到被代理服务器,nginx将关闭连接。
 可以通过指定时间单位以免引起混乱,支持的时间单位有”s”(秒), “ms”(毫秒), “y”(年), “M”(月), “w”(周), “d”(日), “h”(小时),和 “m”(分钟)。
 这个值不能大于597小时。

 

q.proxy_set_body

语法:proxy_set_body [ on | off ]
 默认值:proxy_set_body off;
 使用字段:http, server, location, if
 可用版本:0.3.10。
 设置通过后端的body的值,这个值可以包含变量。

 

r.proxy_set_header

语法:proxy_set_header header value
 默认值: Host and Connection
 使用字段:http, server, location
 这个指令允许将发送到被代理服务器的请求头重新定义或者增加一些字段。
 这个值可以是一个文本,变量或者它们的组合。
 proxy_set_header在指定的字段中没有定义时会从它的上级字段继承。
 默认只有两个字段可以重新定义:

proxy_set_header Host $proxy_host;

proxy_set_header Connection Close;

未修改的请求头“Host”可以用如下方式传送:

proxy_set_header Host $http_host;

但是如果这个字段在客户端的请求头中不存在,那么不发送数据到被代理服务器。
 这种情况下最好使用$Host变量,它的值等于请求头中的”Host”字段或服务器名:

proxy_set_header Host $host;

此外,可以将被代理的端口与服务器名称一起传递:

proxy_set_header Host $host:$proxy_port;

如果设置为空字符串,则不会传递头部到后端,例如下列设置将禁止后端使用gzip压缩:

proxy_set_header  Accept-Encoding  "";

 

s.proxy_ssl_session_reuse

语法:proxy_ssl_session_reuse [ on | off ];
 默认值: proxy_ssl_session_reuse on;
 使用字段:http, server, location
 使用版本:≥ 0.7.11
 当使用https连接到上游服务器时尝试重用ssl会话。

 

t.proxy_store

语法:proxy_store [on | off | path]
 默认值:proxy_store off
 使用字段:http, server, location
 这个指令设置哪些传来的文件将被存储,参数”on”保持文件与alias或root指令指定的目录一致,参数”off”将关闭存储,路径名中可以使用变量:

proxy_store   /data/www$original_uri;

应答头中的”Last-Modified”字段设置了文件最后修改时间,为了文件的安全,可以使用proxy_temp_path指定一个临时文件目录。
 这个指令为那些不是经常使用的文件做一份本地拷贝。从而减少被代理服务器负载。

location /images/ {

  root                 /data/www;

  error_page           404 = /fetch$uri;

}

 

location /fetch {

  internal;

  proxy_pass           http://backend;

  proxy_store          on;

  proxy_store_access   user:rw  group:rw  all:r;

  proxy_temp_path      /data/temp;

  alias                /data/www;

}

或者通过这种方式:

location /images/ {

  root                 /data/www;

  error_page           404 = @fetch;

}

 

location @fetch {

  internal;

 

  proxy_pass           http://backend;

  proxy_store          on;

  proxy_store_access   user:rw  group:rw  all:r;

  proxy_temp_path      /data/temp;

 

  root                 /data/www;

}

注意proxy_store不是一个缓存,它更像是一个镜像。

 

u.proxy_store_access

语法:proxy_store_access users:permissions [users:permission …]
 默认值:proxy_store_access user:rw
 使用字段:http, server, location
 指定创建文件和目录的相关权限,如:

proxy_store_access  user:rw  group:rw  all:r;

如果正确指定了组和所有的权限,则没有必要去指定用户的权限:

proxy_store_access  group:rw  all:r;

 

v.proxy_temp_file_write_size

语法:proxy_temp_file_write_size size;
 默认值:proxy_temp_file_write_size [”#proxy buffer size”] * 2;
 使用字段:http, server, location, if
 设置在写入proxy_temp_path时数据的大小,在预防一个工作进程在传递文件时阻塞太长。

 

w.proxy_temp_path

语法:proxy_temp_path dir-path [ level1 [ level2 [ level3 ] ;
 默认值:在configure时由–http-proxy-temp-path指定
 使用字段:http, server, location
 类似于http核心模块中的client_body_temp_path指令,指定一个地址来缓冲比较大的被代理请求。

proxy_upstream_fail_timeout

0.5.0版本后不推荐使用,请使用http负载均衡模块中server指令的fail_timeout参数。

proxy_upstream_max_timeout

0.5.0版本后不推荐使用,请使用http负载均衡模块中server指令的max_fails参数。

变量

该模块中包含一些内置变量,可以用于proxy_set_header指令中以创建头部。

$proxy_add_x_forwarded_for

包含客户端的请求头“X-Forwarded-For”与$remote_addr,用逗号分开,如果不存在X-Forwarded-For请求头,则$proxy_add_x_forwarded_for等于$remote_addr。

 

x.$proxy_host

被代理服务器的主机名与端口号。

$proxy_internal_body_length

通过proxy_set_body设置的代理请求实体的长度。

$proxy_host

被代理服务器的端口号。

 


你可能感兴趣的:(13 Nginx的标准http模块)