首页 技术 正文
技术 2022年11月9日
0 收藏 961 点赞 3,375 浏览 20507 个字

ngx_http_proxy_module

ngx_http_proxy_module模块允许将请求传递到另一个服务器。

proxy_bind

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

使与代理服务器的出站连接源自具有可选端口(1.11.2)的指定本地IP地址。 参数值可以包含变量(1.3.12)。 特殊值off(1.3.12)取消了继承自先前配置级别的proxy_bind配置参数的作用,允许系统自动分配本地IP地址和端口。

透明参数(1.11.0)允许到代理服务器的传出连接来自非本地IP地址,例如,来自客户端的真实IP地址:

proxy_bind $remote_addr transparent;

为了使此参数工作,必须运行具有超级用户权限的nginx工作进程,并配置内核路由表以拦截来自代理服务器的网络流量。

proxy_buffer_size

Syntax: proxy_buffer_size size;
Default: proxy_buffer_size 4k|8k;
Context: http, server, location

设置用于读取从代理服务器接收的响应的第一部分的缓冲区大小。 这部分通常包含一个小的响应头。 默认情况下,缓冲区大小等于一个内存页。 这是4K或8K,取决于平台。 然而,它可以做得更小。

proxy_buffering

Syntax: proxy_buffering on | off;
Default: proxy_buffering on;
Context: http, server, location

当启用缓冲时,nginx会尽快从代理服务器接收响应,将其保存到由proxy_buffer_size和proxy_buffers指令设置的缓冲区中。 如果整个响应不适合内存,它的一部分可以保存到磁盘上的临时文件。 写入临时文件由proxy_max_temp_file_size和proxy_temp_file_write_size指令控制。

当禁用缓冲时,响应在接收到时立即同步传递给客户端。 nginx不会尝试从代理服务器读取整个响应。 nginx一次可以从服务器接收的数据的最大大小由proxy_buffer_size指令设置。

通过在“X-Accel-Buffering”响应头字段中传递“yes”或“no”,也可以启用或禁用缓冲。 此功能可以使用proxy_ignore_headers指令禁用。

proxy_buffers

Syntax: proxy_buffers number size;
Default: proxy_buffers 8 4k|8k;
Context: http, server, location

设置用于从代理服务器读取单个连接的响应的缓冲区的数量和大小。 默认情况下,缓冲区大小等于一个内存页。 这是4K或8K,取决于平台。

proxy_busy_buffers_size

Syntax: proxy_busy_buffers_size size;
Default: proxy_busy_buffers_size 8k|16k;
Context: http, server, location

当启用来自代理服务器的响应缓冲时,限制可能忙于向客户端发送响应的缓冲区的总大小,而响应尚未完全读取。 同时,其余缓冲区可用于读取响应,并且如果需要,缓冲对临时文件的响应的一部分。 默认情况下,大小受由proxy_buffer_size和proxy_buffers指令设置的两个缓冲区的大小的限制。

proxy_cache

Syntax: proxy_cache zone | off;
Default: proxy_cache off;
Context: http, server, location

定义用于缓存的共享内存区域。 同一区域可以在几个地方使用。 参数值可以包含变量(1.7.9)。 off参数禁用从先前配置级别继承的缓存。

proxy_cache_bypass

Syntax: proxy_cache_bypass string ...;
Default: —
Context: 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_convert_head

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.

启用或禁用将“HEAD”方法转换为“GET”进行缓存。 当禁用转换时,缓存键应配置为包括$ request_method。

proxy_cache_key

Syntax: proxy_cache_key string;
Default: proxy_cache_key $scheme$proxy_host$request_uri;
Context: http, server, location

例如,定义用于缓存的键:

proxy_cache_key "$host$request_uri $cookie_user";

默认情况下,指令的值接近字符串:

proxy_cache_key $scheme$proxy_host$uri$is_args$args;

proxy_cache_lock

Syntax: proxy_cache_lock on | off;
Default: proxy_cache_lock off;
Context: http, server, location
This directive appeared in version 1.1.12.

启用时,将允许一次只有一个请求通过向代理服务器传递请求来填充根据proxy_cache_key指令标识的新缓存元素。 相同高速缓存元素的其他请求将等待响应出现在高速缓存中或高速缓存锁中以释放此元素,直到由proxy_cache_lock_timeout指令设置的时间。

proxy_cache_lock_age

Syntax: proxy_cache_lock_age time;
Default: proxy_cache_lock_age 5s;
Context: http, server, location
This directive appeared in version 1.7.8.

如果传递到代理服务器用于填充新的高速缓存元素的最后一个请求在指定时间内没有完成,则可以向代理服务器传递另一个请求。

proxy_cache_lock_timeout

Syntax: proxy_cache_lock_timeout time;
Default: proxy_cache_lock_timeout 5s;
Context: http, server, location
This directive appeared in version 1.1.12.

为proxy_cache_lock设置超时。 当时间到期时,请求将被传递到代理服务器,但是,响应不会被缓存。
Notes:在1.7.8之前,响应可以被缓存。

proxy_cache_max_range_offset

Syntax: proxy_cache_max_range_offset number;
Default: —
Context: http, server, location
This directive appeared in version 1.11.6.

设置字节范围请求的偏移量(以字节为单位)。 如果范围超出偏移量,范围请求将传递到代理服务器,并且响应将不会被缓存。

proxy_cache_methods

Syntax: proxy_cache_methods GET | HEAD | POST ...;
Default: proxy_cache_methods GET HEAD;
Context: http, server, location
This directive appeared in version 0.7.59.

如果客户端请求方法列在此指令中,那么响应将被缓存。 “GET”和“HEAD”方法总是添加到列表中,但建议明确指定它们。 另请参见proxy_no_cache指令。

proxy_cache_min_uses

Syntax: proxy_cache_min_uses number;
Default: proxy_cache_min_uses 1;
Context: http, server, location

设置在其后响应将被缓存的请求数。

proxy_cache_path

Syntax: proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
Default: —
Context: http

设置缓存的路径和其他参数。 缓存数据存储在文件中。 高速缓存中的文件名是将MD5函数应用于高速缓存密钥的结果。 levels参数定义缓存的层次结构级别:从1到3,每个级别接受值1或2.例如,在以下配置中:

proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;

缓存中的文件名将如下所示:

/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c

详细参考

proxy_cache_purge

Syntax: proxy_cache_purge string ...;
Default: —
Context: http, server, location
This directive appeared in version 1.5.7.

定义请求将被视为缓存清除请求的条件。 如果字符串参数的至少一个值不为空并且不等于“0”,则删除具有相应高速缓存密钥的高速缓存条目。 通过返回204(无内容)响应来指示成功操作的结果。

如果清除请求的缓存键以星号(“*”)结束,则将从缓存中删除与通配符键匹配的所有缓存条目。 但是,这些条目将保留在磁盘上,直到它们被删除为非活动状态,或由缓存清除器(1.7.12)处理,或客户端尝试访问它们。
说明:此功能可作为我们商业订阅的一部分。

proxy_cache_revalidate

Syntax: proxy_cache_revalidate on | off;
Default: proxy_cache_revalidate off;
Context: http, server, location
This directive appeared in version 1.5.7.

允许使用具有“If-Modified-Since”和“If-None-Match”头字段的条件请求重新验证过期缓存项。

proxy_cache_use_stale

Syntax: proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off ...;
Default: proxy_cache_use_stale off;
Context: http, server, location

确定在与代理服务器通信期间发生错误时,在哪些情况下可以使用过时的高速缓存响应。 指令的参数与proxy_next_upstream指令的参数匹配。

如果无法选择代理服务器处理请求,则error参数还允许使用陈旧的缓存响应。

此外,如果更新参数当前正在被更新,则允许使用陈旧的缓存响应。 这允许最小化更新缓存数据时对代理服务器的访问次数。

为了最小化填充新缓存元素时对代理服务器的访问次数,可以使用proxy_cache_lock指令。

proxy_cache_valid

Syntax: proxy_cache_valid [code ...] time;
Default: —
Context: http, server, location

设置不同响应代码的缓存时间。 例如,以下指令:

proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;

对代码200和302的响应设置10分钟的缓存,对代码404的响应设置为1分钟。

如果仅指定高速缓存时间:

proxy_cache_valid 5m;

那么只缓存200,301和302响应。

此外,可以指定any参数来缓存任何响应:

proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;

缓存的参数也可以直接在响应头中设置。 这比使用指令设置缓存时间具有更高的优先级。

  • “X-Accel-Expires”标头字段设置响应的缓存时间(以秒为单位)。 零值禁用缓存用于响应。 如果值以@前缀开头,它将设置从Epoch开始的绝对时间(以秒为单位),直到响应可以被缓存。

  • 如果报头不包括“X-Accel-Expires”字段,则可以在报头字段“Expires”或“Cache-Control”中设置高速缓存的参数。

  • 如果头包括“Set-Cookie”字段,则这样的响应将不被缓存。

  • 如果头包括具有特殊值“*”的“Vary”字段,则这样的响应将不被缓存(1.7.7)。 如果头部包括具有另一个值的“Vary”字段,则这样的响应将在考虑相应的请求头字段(1.7.7)的情况下被缓存。

可以使用proxy_ignore_headers指令禁用对这些响应头字段中的一个或多个的处理。

proxy_connect_timeout

Syntax: proxy_connect_timeout time;
Default: proxy_connect_timeout 60s;
Context: http, server, location

定义与代理服务器建立连接的超时。 应该注意,该超时通常不能超过75秒。

proxy_cookie_domain

Syntax: proxy_cookie_domain off;
proxy_cookie_domain domain replacement;
Default: proxy_cookie_domain off;
Context: http, server, location
This directive appeared in version 1.1.15.

设置应在代理服务器响应的“Set-Cookie”标头字段的域属性中更改的文本。 假设代理服务器返回具有属性“domain = localhost”的“Set-Cookie”头字段。 指令:

proxy_cookie_domain localhost example.org;

将此属性重写为“domain = example.org”。

域和替换字符串开头的点和域属性将被忽略。 匹配不区分大小写。

域和替换字符串可以包含变量:

proxy_cookie_domain www.$host $host;

该伪指令也可以使用正则表达式指定。 在这种情况下,域应该从“〜”符号开始。 正则表达式可以包含命名和位置捕获,并且替换可以引用它们:

proxy_cookie_domain ~\.(?P<sl_domain>[-0-9a-z]+\.[a-z]+)$ $sl_domain;

可能有几个proxy_cookie_domain指令:

proxy_cookie_domain localhost example.org;
proxy_cookie_domain ~\.([a-z]+\.[a-z]+)$ $1;

off参数取消所有proxy_cookie_domain指令对当前级别的影响:

proxy_cookie_domain off;
proxy_cookie_domain localhost example.org;
proxy_cookie_domain www.example.org example.org;

proxy_cookie_path

Syntax: proxy_cookie_path off;
proxy_cookie_path path replacement;
Default: proxy_cookie_path off;
Context: http, server, location
This directive appeared in version 1.1.15.

设置应在代理服务器响应的“Set-Cookie”标头字段的路径属性中更改的文本。 假设代理服务器返回具有属性“path = / two / some / uri /”的“Set-Cookie”报头字段。 指令:

proxy_cookie_path /two/ /;

将此属性重写为“path = / some / uri /”。

路径和替换字符串可以包含变量:

proxy_cookie_path $uri /some$uri;

该伪指令也可以使用正则表达式指定。 在这种情况下,路径应该从“〜”符号开始区分大小写匹配,或者从“〜*”符号开始区分大小写匹配。 正则表达式可以包含命名和位置捕获,并且替换可以引用它们:

proxy_cookie_path ~*^/user/([^/]+) /u/$1;

可能有几个proxy_cookie_path指令:

proxy_cookie_path /one/ /;
proxy_cookie_path / /two/;

off参数取消所有proxy_cookie_path指令对当前级别的影响:

proxy_cookie_path off;
proxy_cookie_path /two/ /;
proxy_cookie_path ~*^/user/([^/]+) /u/$1;

proxy_force_ranges

Syntax: proxy_force_ranges on | off;
Default: proxy_force_ranges off;
Context: http, server, location
This directive appeared in version 1.7.7.

启用来自代理服务器的缓存和非缓存响应的字节范围支持,无论这些响应中的“Accept-Ranges”字段如何。

proxy_headers_hash_bucket_size

Syntax: proxy_headers_hash_bucket_size size;
Default: proxy_headers_hash_bucket_size 64;
Context: http, server, location

设置由proxy_hide_header和proxy_set_header指令使用的哈希表的bucket大小。

proxy_headers_hash_max_size

Syntax: proxy_headers_hash_max_size size;
Default: proxy_headers_hash_max_size 512;
Context: http, server, location

设置proxy_hide_header和proxy_set_header指令使用的散列表的最大大小。 设置哈希表的详细信息在单独的文档中提供。

proxy_hide_header

Syntax: proxy_hide_header field;
Default: —
Context: http, server, location

默认情况下,nginx不从代理服务器到客户端的响应中传递头字段“Date”,“Server”,“X-Pad”和“X-Accel -…”。 proxy_hide_header指令设置不会传递的其他字段。 如果相反,需要允许字段的传递,则可以使用proxy_pass_header指令。

proxy_http_version

Syntax: proxy_http_version 1.0 | 1.1;
Default: proxy_http_version 1.0;
Context: http, server, location
This directive appeared in version 1.1.4.

设置代理的HTTP协议版本。 默认情况下,使用版本1.0。 推荐使用版本1.1与keepalive连接和NTLM身份验证一起使用。

proxy_ignore_client_abort

Syntax: proxy_ignore_client_abort on | off;
Default: proxy_ignore_client_abort off;
Context: http, server, location

确定在客户端关闭连接时是否应关闭与代理服务器的连接,而不等待响应。

proxy_ignore_headers

Syntax: proxy_ignore_headers field ...;
Default: —
Context: http, server, location

禁用来自代理服务器的某些响应头字段的处理。 可以忽略以下字段:“X-Accel-Redirect”,“X-Accel-Expires”,“X-Accel-Limit-Rate”(1.1.6),“X-Accel-Buffering”(1.1.6) ,“X-Accel-Charset”(1.1.6),“Expires”,“Cache-Control”,“Set-Cookie”(0.8.44)和“Vary”(1.7.7)。

如果未禁用,则处理这些头字段具有以下效果:

  • “X-Accel-Expires”,“Expires”,“Cache-Control”,“Set-Cookie”和“Vary”设置响应缓存的参数;

  • “X-Accel-Redirect”执行到指定URI的内部重定向;

  • “X-Accel-Limit-Rate”设置向客户端传输响应的速率限制;

  • “X-Accel-Buffering”启用或禁用响应的缓冲;

  • “X-Accel-Charset”设置响应的所需字符集。

proxy_intercept_errors

Syntax: proxy_intercept_errors on | off;
Default: proxy_intercept_errors off;
Context: http, server, location

确定代码大于或等于300的代理响应是否应传递给客户端,或者拦截并重定向到nginx以便使用error_page指令进行处理。

proxy_limit_rate

Syntax: proxy_limit_rate rate;
Default: proxy_limit_rate 0;
Context: http, server, location
This directive appeared in version 1.7.7.

限制从代理服务器读取响应的速度。 速率以字节/秒指定。 零值禁用速率限制。 每个请求设置限制,因此如果nginx同时打开到代理服务器的两个连接,则总速率将是指定限制的两倍。 仅当启用了来自代理服务器的响应缓冲时,限制才有效。

proxy_max_temp_file_size

Syntax: proxy_max_temp_file_size size;
Default: proxy_max_temp_file_size 1024m;
Context: http, server, location

当缓冲来自代理服务器的响应被启用,并且整个响应不适合由proxy_buffer_size和proxy_buffers指令设置的缓冲区时,响应的一部分可以保存到临时文件。 此伪指令设置临时文件的最大大小。 每次写入临时文件的数据大小由proxy_temp_file_write_size指令设置。

零值禁用缓冲对临时文件的响应。

Notes:此限制不适用于将缓存或存储在磁盘上的响应。

proxy_method

Syntax: proxy_method method;
Default: —
Context: http, server, location

指定在转发到代理服务器的请求中使用的HTTP方法,而不是来自客户端请求的方法。 参数值可以包含变量(1.11.6)。

proxy_next_upstream

Syntax: proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | non_idempotent | off ...;
Default: proxy_next_upstream error timeout;
Context: http, server, location

指定请求应传递到下一个服务器的情况:

  • error:在与服务器建立连接,向其传递请求或读取响应标头时发生错误;

  • timeout:在与服务器建立连接,向其传递请求或读取响应头时发生超时;

  • invalid_header:服务器返回空响应或无效响应;

  • http_500:服务器返回了带有代码500的响应;

  • http_502:服务器返回具有代码502的响应;

  • HTTP_503:服务器返回具有代码503的响应;

  • http_504:服务器返回具有代码504的响应;

  • http_403:服务器返回带有代码403的响应;

  • http_404:服务器返回具有代码404的响应;

  • non_idempotent:通常,如果请求已经被发送到上游服务器(1.9.13),则具有非幂等方法的请求(POST,LOCK,PATCH)不被传递到下一个服务器;启用此选项明确允许重试此类请求;

  • off:禁用将请求传递到下一个服务器。

应该记住,将请求传递到下一个服务器是可能的,如果还没有发送到客户端。也就是说,如果在传送响应的中间发生错误或超时,则固定不可能。

该指令还定义了与服务器通信的失败尝试。错误,超时和invalid_header的情况始终被认为是不成功的尝试,即使它们没有在指令中指定。只有在指令中指定http_500,http_502,http_503和http_504的情况下,才会被视为不成功尝试。 http_403和http_404的情况绝不会被认为是失败的尝试。

将请求传递到下一个服务器可以通过尝试次数和时间来限制。

proxy_next_upstream_timeout

Syntax: proxy_next_upstream_timeout time;
Default: proxy_next_upstream_timeout 0;
Context: http, server, location
This directive appeared in version 1.7.5.

限制请求可以传递到下一个服务器的时间。 0值关闭此限制。

proxy_next_upstream_tries

Syntax: proxy_next_upstream_tries number;
Default: proxy_next_upstream_tries 0;
Context: http, server, location
This directive appeared in version 1.7.5.

限制将请求传递到下一个服务器的可能尝试次数。 0值关闭此限制。

proxy_no_cache

Syntax: proxy_no_cache string ...;
Default: —
Context: http, server, location

定义响应不会保存到缓存的条件。 如果字符串参数的至少一个值不为空,并且不等于“0”,则不会保存响应:

proxy_no_cache $cookie_nocache $arg_nocache$arg_comment;
proxy_no_cache $http_pragma $http_authorization;

可以与proxy_cache_bypass指令一起使用。

proxy_pass

Syntax: proxy_pass URL;
Default: —
Context: location, if in location, limit_except

设置代理服务器的协议和地址以及应映射位置的可选URI。 作为协议,可以指定“http”或“https”。 可以将地址指定为域名或IP地址以及可选端口:

proxy_pass http://localhost:8000/uri/;

如果域名解析为多个地址,则所有这些地址都将以循环方式使用。 此外,可以将地址指定为服务器组。

请求URI传递到服务器,如下所示:

  • 如果使用URI指定proxy_pass指令,则当请求传递到服务器时,匹配该位置的规范化请求URI的一部分将被指令中指定的URI替换:

    location /name/ {
    proxy_pass http://127.0.0.1/remote/;
    }
  • 如果proxy_pass没有指定URI,那么当处理原始请求时,请求URI以与客户端发送的形式相同的形式传递到服务器,或者在处理更改的URI时传递完整的规范化请求URI:

    location /some/path/ {
    proxy_pass http://127.0.0.1;
    }

Notes:在版本1.1.12之前,如果proxy_pass未指定URI,则在某些情况下可能会传递原始请求URI,而不是更改的URI。

在某些情况下,无法确定要替换的请求URI的部分:

  • 使用正则表达式指定位置时。
    在这种情况下,应该在没有URI的情况下指定指令。

  • 当使用rewrite指令在代理位置内更改URI时,将使用相同的配置来处理请求(break):

    location /name/ {
    rewrite /name/([^/]+) /users?name=$1 break;
    proxy_pass http://127.0.0.1;
    }

在这种情况下,将忽略指令中指定的URI,并将完全更改的请求URI传递到服务器。

还可以使用变量指定服务器名称,其端口和传递的URI:

proxy_pass http://$host$uri;

或甚至像这样:

proxy_pass $request;

在这种情况下,在所描述的服务器组中搜索服务器名称,并且如果没有找到,则使用解析器来确定服务器名称。

WebSocket代理需要特殊配置,并且从版本1.3.13开始支持。

proxy_pass_header

Syntax: proxy_pass_header field;
Default: —
Context: http, server, location

允许从代理服务器向客户端传递禁用的标头字段。

proxy_pass_request_body

Syntax: proxy_pass_request_body on | off;
Default: proxy_pass_request_body on;
Context: http, server, location

指示是否将原始请求正文传递给代理服务器。

location /x-accel-redirect-here/ {
proxy_method GET;
proxy_pass_request_body off;
proxy_set_header Content-Length ""; proxy_pass ...
}

另请参见proxy_set_header和proxy_pass_request_headers指令。

proxy_pass_request_headers

Syntax: proxy_pass_request_headers on | off;
Default: proxy_pass_request_headers on;
Context: http, server, location

指示原始请求的标头字段是否传递到代理服务器。

location /x-accel-redirect-here/ {
proxy_method GET;
proxy_pass_request_headers off;
proxy_pass_request_body off; proxy_pass ...
}

另请参见proxy_set_header和proxy_pass_request_body指令。

proxy_read_timeout

Syntax: proxy_read_timeout time;
Default: proxy_read_timeout 60s;
Context: http, server, location

定义从代理服务器读取响应的超时。 超时仅在两个连续读取操作之间设置,而不是用于传输整个响应。 如果代理服务器在此时间内未发送任何内容,则连接将关闭。

proxy_redirect

Syntax: proxy_redirect default;
proxy_redirect off;
proxy_redirect redirect replacement;
Default: proxy_redirect default;
Context: http, server, location

设置应在代理服务器响应的“位置”和“刷新”标头字段中更改的文本。 假设代理服务器返回头字段“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)。
缺省参数指定的缺省替换使用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_pass,则不允许使用默认参数。
替换字符串可以包含变量:

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

重定向还可以包含(1.1.11)变量:

proxy_redirect http://$proxy_host:8000/ /;

该伪指令可以使用正则表达式指定(1.1.11)。 在这种情况下,重定向应该以“〜”符号开始,区分大小写匹配,或者用“〜*”符号开始大小写不敏感匹配。 正则表达式可以包含命名和位置捕获,并且替换可以引用它们:

proxy_redirect ~^(http://[^:]+):\d+(/.+)$ $1$2;
proxy_redirect ~*/user/([^/]+)/(.+)$ http://$1.example.com/$2;

可能有几个proxy_redirect指令:

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_request_buffering

Syntax: proxy_request_buffering on | off;
Default: proxy_request_buffering on;
Context: http, server, location
This directive appeared in version 1.7.11.

启用或禁用客户端请求正文的缓冲。

当启用缓冲时,在将请求发送到代理服务器之前,从客户端读取整个请求体。

当禁用缓冲时,请求主体在接收到时立即发送到代理服务器。 在这种情况下,如果nginx已经开始发送请求主体,则请求无法传递到下一个服务器。

当使用HTTP / 1.1分块传输编码发送原始请求体时,无论指令值如何,都将缓冲请求体,除非启用HTTP / 1.1代理。

proxy_send_lowat

Syntax: proxy_send_lowat size;
Default: proxy_send_lowat 0;
Context: http, server, location

如果指令设置为非零值,则nginx将尝试使用kqueue方法的NOTE_LOWAT标志或具有指定大小的SO_SNDLOWAT套接字选项,最小化到代理服务器的传出连接上的发送操作数。

在Linux,Solaris和Windows上将忽略此指令。

proxy_send_timeout

Syntax: proxy_send_timeout time;
Default: proxy_send_timeout 60s;
Context: http, server, location

设置将请求传输到代理服务器的超时。 超时仅在两个连续的写操作之间设置,而不是用于传输整个请求。 如果代理服务器在此时间内未收到任何内容,则连接将关闭。

proxy_set_body

Syntax: proxy_set_body value;
Default: —
Context: http, server, location

允许重新定义传递到代理服务器的请求主体。 该值可以包含文本,变量及其组合。

proxy_set_header

Syntax: proxy_set_header field value;
Default: proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
Context: http, server, location

允许重新定义或附加字段到传递到代理服务器的请求标头。 该值可以包含文本,变量及其组合。 当且仅当没有在当前级别上定义的proxy_set_header指令时,这些指令从上一级继承。 默认情况下,只重新定义两个字段:

proxy_set_header Host       $proxy_host;
proxy_set_header Connection close;

如果启用高速缓存,则从第(i + 1)个字段的头字段“If-Modified-Since”,“If-Unmodified-Since”,“If-None-Match”,“If-Match”,“Range” 原始请求不会传递到代理服务器。

未更改的“Host”请求头字段可以像这样传递:

proxy_set_header Host       $http_host;

但是,如果此字段不存在于客户端请求标头中,则不会传递任何内容。 在这种情况下,最好使用$ host变量 – 其值等于“Host”请求头字段中的服务器名称,或者如果此字段不存在,则为主服务器名称:

proxy_set_header Host       $host;

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

proxy_set_header Host       $host:$proxy_port;

如果头字段的值为空字符串,则此字段不会传递到代理服务器:

proxy_set_header Accept-Encoding "";

proxy_ssl_certificate

Syntax: proxy_ssl_certificate file;
Default: —
Context: http, server, location
This directive appeared in version 1.7.8.

指定具有PEM格式的证书的文件,用于对代理HTTPS服务器进行身份验证。

proxy_ssl_certificate_key

Syntax: proxy_ssl_certificate_key file;
Default: —
Context: http, server, location
This directive appeared in version 1.7.8.

指定具有PEM格式的密钥的文件,用于向代理HTTPS服务器进行身份验证。

可以指定值engine:name:id而不是文件(1.7.9),该文件从OpenSSL引擎名称加载具有指定标识的密钥。

proxy_ssl_ciphers

Syntax: proxy_ssl_ciphers ciphers;
Default: proxy_ssl_ciphers DEFAULT;
Context: http, server, location
This directive appeared in version 1.5.6.

指定对代理HTTPS服务器的请求启用的密码。 密码以OpenSSL库理解的格式指定。

可以使用“openssl ciphers”命令查看完整列表。

proxy_ssl_crl

Syntax: proxy_ssl_crl file;
Default: —
Context: http, server, location
This directive appeared in version 1.7.0.

指定具有以用于验证代理HTTPS服务器的证书的PEM格式的撤销证书(CRL)的文件。

proxy_ssl_name

Syntax: proxy_ssl_name name;
Default: proxy_ssl_name $proxy_host;
Context: http, server, location
This directive appeared in version 1.7.0.

允许覆盖用于验证代理HTTPS服务器的证书并在与代理HTTPS服务器建立连接时通过SNI的服务器名称。

默认情况下,使用proxy_pass URL的主机部分。

proxy_ssl_password_file

Syntax: proxy_ssl_password_file file;
Default: —
Context: http, server, location
This directive appeared in version 1.7.8.

指定具有密钥的密码的文件,其中每个密码短语在单独的行上指定。 加载密钥时依次尝试密码。

proxy_ssl_server_name

Syntax: proxy_ssl_server_name on | off;
Default: proxy_ssl_server_name off;
Context: http, server, location
This directive appeared in version 1.7.0.

在与代理HTTPS服务器建立连接时,启用或禁用通过TLS服务器名称指示扩展(SNI,RFC 6066)传递服务器名称。

proxy_ssl_session_reuse

Syntax: proxy_ssl_session_reuse on | off;
Default: proxy_ssl_session_reuse on;
Context: http, server, location

确定在使用代理服务器时是否可以重新使用SSL会话。 如果日志中显示错误“SSL3_GET_FINISHED:digest check failed”,请尝试禁用会话重用。

proxy_ssl_protocols

Syntax: proxy_ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
Default: proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
Context: http, server, location
This directive appeared in version 1.5.6.

对代理HTTPS服务器的请求启用指定的协议。

proxy_ssl_trusted_certificate

Syntax: proxy_ssl_trusted_certificate file;
Default: —
Context: http, server, location
This directive appeared in version 1.7.0.

指定具有用于验证代理HTTPS服务器的证书的PEM格式的受信任CA证书的文件。

proxy_ssl_verify

Syntax: proxy_ssl_verify on | off;
Default: proxy_ssl_verify off;
Context: http, server, location
This directive appeared in version 1.7.0.

启用或禁用代理HTTPS服务器证书的验证。

proxy_ssl_verify_depth

Syntax: proxy_ssl_verify_depth number;
Default: proxy_ssl_verify_depth 1;
Context: http, server, location
This directive appeared in version 1.7.0.

设置代理HTTPS服务器证书链中的验证深度。

proxy_store

Syntax: proxy_store on | off | string;
Default: proxy_store off;
Context: http, server, location

启用将文件保存到磁盘。 on参数使用与指令别名或根对应的路径保存文件。 off参数禁用文件保存。 此外,文件名可以使用带有变量的字符串显式设置:

proxy_store /data/www$original_uri;

文件的修改时间根据接收到的“Last-Modified”响应头字段设置。 响应首先写入临时文件,然后重命名该文件。 从版本0.8.9开始,临时文件和持久存储可以放在不同的文件系统上。 但是,请注意,在这种情况下,文件跨两个文件系统复制,而不是廉价的重命名操作。 因此,建议对于任何给定位置,保存的文件和由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_access

Syntax: proxy_store_access users:permissions ...;
Default:
proxy_store_access user:rw;
Context: http, server, location

设置新创建的文件和目录的访问权限,例如:

proxy_store_access user:rw group:rw all:r;

如果指定了任何组或所有访问权限,则可以省略用户权限:

proxy_store_access group:rw all:r;

proxy_temp_file_write_size

Syntax: proxy_temp_file_write_size size;
Default: proxy_temp_file_write_size 8k|16k;
Context: http, server, location

当启用从代理服务器到临时文件的缓冲缓冲时,限制写入临时文件的数据的大小。 默认情况下,size受限于由proxy_buffer_size和proxy_buffers指令设置的两个缓冲区。 临时文件的最大大小由proxy_max_temp_file_size指令设置。

proxy_temp_path

Syntax: proxy_temp_path path [level1 [level2 [level3]]];
Default: proxy_temp_path proxy_temp;
Context: http, server, location

定义用于存储具有从代理服务器接收的数据的临时文件的目录。 最多可以在指定目录下使用三级子目录层次结构。 例如,在以下配置中:

proxy_temp_path /spool/nginx/proxy_temp 1 2;

一个临时文件可能如下所示:

/spool/nginx/proxy_temp/7/45/00000123457

另请参见proxy_cache_path指令的use_temp_path参数。

http://nginx.org/en/docs/http/ngx_http_proxy_module.html

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,119
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,591
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,436
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,207
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,843
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,928