本篇文章主要讲ngx_http_proxy_module模块下各指令的使用方法。
Syntax: proxy_pass URL;
Default: —
Context: location, if in location, limit_except
设置代理服务器的协议和地址以及location应映射到的可选 URI。协议可指定为 "http "或 "https"。地址可指定为域名或 IP 地址,以及一个可选端口,如:
proxy_pass http://localhost:8000/uri/;
如果一个域名解析到多个地址,所有地址都将以循环方式使用。另外,还可以将一个地址指定为一个服务器组(即负载均衡组,proxy_pass配合upstream一起使用)。
参数值可以包含变量。在这种情况下,如果将地址指定为域名,则在描述的服务器组中搜索该名称,如果找不到,则使用resolver指令确定。
如果proxy_pass指令已指定URI,请求URI将按如下步骤发送给服务器:
location /pages/ { proxy_pass http://127.0.0.1:8688/test/; }
原始请求为:http://47.**.**.80:8688/pages/test/mg.js
最终请求为:http://127.0.0.1:8688/test/test/mg.js。将原始请求中与location匹配的部分替换成指定的URI。
使用替换后的请求URL进行代理转发。
Nginx记录日志如下
{"time_iso8601":"2023-12-30T15:16:50+08:00","http_host":"127.0.0.1:8688","remote_addr":"127.0.0.1","request_uri":"/test/test/mg.js","status":"404","bytes_sent":"720","request_time":"0.000","gzip_ratio":"",} {"time_iso8601":"2023-12-30T15:16:50+08:00","http_host":"47.**.**.80:8688","remote_addr":"14.145.163.198","request_uri":"/pages/test/mg.js","status":"404","bytes_sent":"749","request_time":"0.000","gzip_ratio":"",}
结论:
如果 proxy_pass 指定了 URI,Nginx 会将原始请求中与location完全匹配的部分替换成指定的URI,原始请求URI之后的内容仍保持不变。
再看一个小测试。修改Nginx配置如下,去掉location name “/pages/” 后面的“/”
location /pages { proxy_pass http://127.0.0.1:8688/test/; }
原始请求URL:http://47.**.**.80:8688/pagesttt/test/mg.js,大胆猜测下Nginx代理请求URL会是什么。
请求请求URL:http://47.**.**.80:8688/test/ttt/test/mg.js
Nginx日志如下
{"time_iso8601":"2023-12-30T15:23:54+08:00","http_host":"127.0.0.1:8688","remote_addr":"127.0.0.1","request_uri":"/test/ttt/test/mg.js","status":"404","bytes_sent":"720","request_time":"0.000","gzip_ratio":"",} {"time_iso8601":"2023-12-30T15:23:54+08:00","http_host":"47.**.**.80:8688","remote_addr":"14.145.163.198","request_uri":"/pagesttt/test/mg.js","status":"404","bytes_sent":"749","request_time":"0.000","gzip_ratio":"",}
一定要注意上面结论里提到的完全匹配!!! 所以,我们在配置代理请求时要尽量把location配置成精确匹配 = ,如果只能配置成通用匹配,那就尽量在location name后面也加上"/"。location的匹配规则及优先级可以参考这篇文章 Nginx(六) Nginx location 匹配顺序及优先级深究(亲测有效)_ng location 先后顺序
如果proxy_pass指令未指定URI,请求URI将按如下步骤发送给服务器:
location /pages/ { proxy_pass http://127.0.0.1:8080; }
原始请求为:http://47.**.**.80:8688/pages/test/mg.js
最终请求为:http://127.0.0.1:8080/pages/test/mg.js。URI保持不变。
使用最终请求URL进行代理转发。
Nginx输出日志
{"time_iso8601":"2023-12-30T16:55:15+08:00","http_host":"127.0.0.1:8080","remote_addr":"127.0.0.1","request_uri":"/pages/test/mg.js","status":"404","bytes_sent":"720","request_time":"0.000","gzip_ratio":"",} {"time_iso8601":"2023-12-30T16:55:15+08:00","http_host":"47.**.**.80:8688","remote_addr":"14.145.163.198","request_uri":"/pages/test/mg.js","status":"404","bytes_sent":"749","request_time":"0.000","gzip_ratio":"",}
结论:
如果 proxy_pass 未指定 URI,且仅指定了代理服务器的IP(和端口),后面未加"/",那么代理请求URL中的URI还使用原始请求中的URI。
再看个小测试。修改Nginx配置如下,代理地址后增加一个"/"
location /pages/ { proxy_pass http://127.0.0.1:8080/; }
原始请求为:http://47.**.**.80:8688/pages/test/mg.js
最终请求为:http://127.0.0.1:8080/test/mg.js。将原始请求中与location匹配的部分替换成空字符串(也可以理解成删除匹配部分)。
使用替换后的请求URL进行代理转发。
Nginx输出日志
{"time_iso8601":"2023-12-30T17:02:02+08:00","http_host":"127.0.0.1:8080","remote_addr":"127.0.0.1","request_uri":"/test/mg.js","status":"404","bytes_sent":"720","request_time":"0.000","gzip_ratio":"",} {"time_iso8601":"2023-12-30T17:02:02+08:00","http_host":"47.**.**.80:8688","remote_addr":"14.145.163.198","request_uri":"/pages/test/mg.js","status":"404","bytes_sent":"749","request_time":"0.000","gzip_ratio":"",}
切记,如果location是正则表达式匹配, proxy_pass指令不能指定URI。
Syntax: proxy_redirect default;
proxy_redirect off;
proxy_redirect redirect replacement;
Default: proxy_redirect default;
Context: http, server, location
该指令用于设置如何处理代理服务器返回的重定向响应(301或302响应码)。简单直白的理解就是修改后端服务器返回的请求重定向路径,避免暴露后端服务器IP和端口。
proxy_redirect 支持同时配置多个,可根据不同的需求配置多个proxy_redirect。
proxy_redirect default;
proxy_redirect http://localhost:8000/ /;
proxy_redirect http://www.example.com/ /;
proxy_redirect 指令不同配置的重定向结果请参考这篇文章 Nginx(十五) proxy_pass和proxy_redirect指令的组合测试
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版本,使用1.1版本自带的“Connection:keep-alive”请求体字段来开启HTTP长连接。
Syntax: proxy_set_header field value;
Default: proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
Context: http, server, location
在发送代理请求前,可通过该指令来新增或修改请求头字段信息。value可包含文本和变量。该指令可被继承,但只有在当前级别未配置该指令时,才会继承上一级的配置。默认情况下。只配置了如下两个请求头字段:
proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
如果启用了代理缓存,那么原始请求头中的“ If-Modified-Since”,“ If-Unmodified-Since”,“ If-None-Match”,“ If-Match”,“ Range”和“ If-Range”字段不会传递到代理服务器。
# 给代理服务器传递原始请求的host信息,如果请求头中没有http_host字段,那么传递的内容为空
proxy_set_header Host $http_host;
# 如果原始请求头总没有http_host字段,也可使用$host变量来传递host信息
proxy_set_header Host $host;
host也可以和代理服务器端口一起传递
proxy_set_header Host $host:$proxy_port;
# 向后端服务器传递客户端真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
Syntax: proxy_set_body value;
Default: —
Context: http, server, location
在发送代理请求前,可通过该指令来修改请求体信息。 value可包含文本和变量。
Syntax: proxy_pass_header field;
Default: —
Context: http, server, location
设置允许将后端服务器返回的响应头中的哪些原本被禁用的字段传递给客户端,默认情况下,Nginx不会把后端服务器返回的响应头中的“Date”、“Server”、“X-Pad”和“X-Accel-...”等字段返回给客户端。参考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 指令。
Syntax: proxy_pass_request_body on | off;
Default: proxy_pass_request_body on;
Context: http, server, location
设置是否将原始请求中的body传递给后端服务器。默认是on,表示传递。
location /x-accel-redirect-here/ {
proxy_method GET;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_pass ...
}
Syntax: proxy_pass_request_headers on | off;
Default: proxy_pass_request_headers on;
Context: http, server, location
设置是否将原始请求中的header传递给后端服务器。默认是on,表示传递。
location /x-accel-redirect-here/ {
proxy_method GET;
proxy_pass_request_headers off;
proxy_pass_request_body off;
proxy_pass ...
}
代理缓冲区用于临时存储从后端服务器返回的响应数据。启用代理缓冲时,Nginx是等待接收完整个响应后再将其返回给客户端,可提高服务器性能和效率。禁用代理缓冲时,响应数据是立即同步给客户端,响应速度会有所提高,适用于对实时性要求较高的场景。
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 指令禁用这一功能。
Syntax: proxy_buffers number size;
Default: proxy_buffers 8 4k|8k;
Context: http, server, location
该指令用于设置Nginx从后端服务器读取单个连接响应数据的缓冲区数量和大小。默认情况下,缓冲区大小等于一个内存页。根据平台不同,缓冲区大小为 4K 或 8K。
Syntax: proxy_buffer_size size;
Default: proxy_buffer_size 4k|8k;
Context: http, server, location
该指令用于设置Nginx从后端服务器读取响应头数据的缓冲区大小,这个缓冲区通常存储一些较小的响应头信息。默认情况下,缓冲区大小等于一个内存页。根据平台的不同,缓冲区大小为 4K 或 8K。不过,它也可以变小。
Syntax: proxy_busy_buffers_size size;
Default: proxy_busy_buffers_size 8k|16k;
Context: http, server, location
启用代理服务器响应缓冲后,将限制正在忙于给客户端发送响应而代理服务器响应尚未被完全读取的缓冲区总大小。在此期间,其余缓冲区可用于读取响应,并在必要时将部分响应缓冲到临时文件中。默认情况下,size 受 proxy_buffer_size 和 proxy_buffers 指令设置的两个缓冲区大小限制。
Syntax: proxy_request_buffering on | off;
Default: proxy_request_buffering on;
Context: http, server, location
This directive appeared in version 1.7.11.
启用代理缓存后,Nginx可以把后端服务器返回的响应数据缓存在磁盘文件中,客户端下次请求同一数据时,Nginx可以直接返回缓存数据,从而提高响应速度,减少向后端发送请求的次数,降低后端服务器的负载。
Syntax: proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [min_free=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
指定缓存的存储路径、目录结构、格式、最大缓存大小和失效时间等参数。
/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c
# 层数是2层,第一层层级是1,第二层层级是2,如:/data/nginx/cache/7/82
proxy_cache_path /data/nginx/cache levels=1:2
# 层数是2层,第一层层级是2,第二层层级是2,如:/data/nginx/cache/17/28
proxy_cache_path /data/nginx/cache levels=2:2
# 层数是3层,第一层层级是1,第二层层级是1,第二层层级是2,如:/data/nginx/cache/7/4/s7
proxy_cache_path /data/nginx/cache levels=1:1:2
# 层数是3层,第一层层级是2,第二层层级是1,第二层层级是2,如:/data/nginx/cache/7/43/b8
proxy_cache_path /data/nginx/cache levels=1:2:2
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=myCache:10m;
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=myCache:10m max_size=1g inactive=60m use_temp_path=off;
另外,Nginx商用版还提供以下几个参数:
Syntax: proxy_cache zone | off;
Default: proxy_cache off;
Context: http, server, location
开启代理缓存并配置用于缓存的共享内存区。同一区域可用于多个地方。off参数表示禁用缓存,且不继承上一级的配置。
proxy_cache myCache;
proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid 200 304 302 1d;
Syntax: proxy_cache_valid [code ...] time;
Default: —
Context: http, server, location
设置不同响应状态码的响应数据缓存时间。可选参数code可以配置多个,中间用空格分隔,如果不配置code,那么仅缓存200、301和302状态码的响应数据。time表示缓存的过期时间。如果需要给不同响应状态码设置不同的缓存策略,可以同时配置多个。
# 状态码为200和302的响应缓存10分钟
proxy_cache_valid 200 302 10m;
# 状态码为404的响应缓存10分钟
proxy_cache_valid 404 1m;
# 仅缓存200、301和302状态码的响应数据
proxy_cache_valid 5m;
# 所有状态码的响应都缓存1分钟
proxy_cache_valid any 1m;
默认情况下,缓存文件会永久保存,除非缓存数据总量超过了缓存上限值或最小可用空间不足时,才会清理不常用的缓存文件。
Syntax: proxy_cache_key string;
Default: proxy_cache_key $scheme$proxy_host$request_uri;
Context: http, server, location
定义缓存key,也可以称为设置缓存维度,Nginx会用这个key来缓存不同的请求响应结果(缓存文件名就是根据key来生成的)。同样的,获取缓存时也是根据这个key来获取对应的缓存文件。
proxy_cache_key "$host$request_uri $cookie_user";
默认情况下,该指令的值应接近于字符串
proxy_cache_key $scheme$proxy_host$uri$is_args$args;
Syntax: proxy_no_cache string ...;
Default: —
Context: http, server, location
设置哪些代理请求的响应不会被缓存。如果字符串参数中至少有一个值不为空且不等于 "0",则响应数据不会被缓存,可以与proxy_cache_bypass指令一起使用。
proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;
proxy_no_cache $http_pragma $http_authorization;
Syntax: proxy_cache_bypass string ...;
Default: —
Context: http, server, location
设置哪些代理请求不从缓存中读取数据,而是直接请求代理服务器。如果字符串参数中至少有一个值不为空且不等于 "0",那么将不会从缓存中获取响应数据,可以与proxy_no_cache指令一起使用。
proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
proxy_cache_bypass $http_pragma $http_authorization;
Syntax: proxy_cache_min_uses number;
Default: proxy_cache_min_uses 1;
Context: http, server, location
设置代理请求达到指定请求次数后,才对其响应进行缓存,防止低频请求的响应数据被缓存。
Syntax: proxy_cache_purge string ...;
Default: —
Context: http, server, location
This directive appeared in version 1.5.7.
设置哪些请求的缓存文件需要被清除。如果字符串参数中至少有一个值不为空且不等于 "0",那么对应cache key的缓存文件将被清除。这个请求需要手动发起,Nginx无法主动发起,返回 204(无内容)响应表示操作成功。
如果设定请求的cache key以星号("*
")结尾,则所有与通配符匹配的缓存文件都将从缓存中清除。不过,这些文件仍将保留在磁盘上,直到它们因inactivity(对应proxy_cache_path指令中的inactive参数)而被删除,或被缓存清除器处理,或客户端尝试访问它们。
proxy_cache_purge myCache $host$1$is_args$args;
假设一个URL为'http://192.168.8.42/test.txt',那么通过访问'http://192.168.8.42/purge/test.txt'就可以清除该URL的缓存!
该指令属于第三方模块,需要单独配置。
wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
tar -xf ngx_cache_purge-2.3.tar.gz && cd nginx-1.12.2
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module\
--with-http_realip_module --with-http_addition_module --with-http_gzip_static_module\
--with-http_stub_status_module --with-http_sub_module --with-pcre\
--add-module=../'ngx_cache_purge-2.3' --add-module=./'nginx_upstream_check_module'
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.
指定哪些请求方法的响应数据会被缓存,如果客户端请求方法在该指令值队列中,则响应将被缓存。Nginx默认始终缓存"GET"和 "HEAD"方法的响应数据,虽然"GET "和 "HEAD "方法总会被添加到该指令值队列中,但在配置时还是建议明确指定它们。
Syntax: proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | off ...;
Default: proxy_cache_use_stale off;
Context: http, server, location
设置在什么情况下可以使用旧缓存,如服务端返回500或404错误信息等,或者是Nginx正在更新旧缓存,那么这时候Nginx可以选择是否要把旧缓存数据返回给客户端。
Syntax: proxy_cache_background_update on | off;
Default: proxy_cache_background_update off;
Context: http, server, location
This directive appeared in version 1.11.10.
允许启动后台子请求来更新已过期的缓存文件,由Nginx向上游主动发送请求来更新过期缓存。请注意,在更新过期缓存响应时,有必要允许使用过期缓存响应。
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 "方法进行缓存。禁用转换时,proxy_cache_key 指令配置内容应包含 $request_method。
Syntax: proxy_cache_lock on | off;
Default: proxy_cache_lock off;
Context: http, server, location
This directive appeared in version 1.1.12.
设置是否开启代理缓存锁。启用后,如果同一时间内有多个相同cache key的代理请求需要发送给代理服务器,那么此时只允许一个(按序选择最靠前的)请求发送给代理服务器,而其它请求要么是等待上一个请求的响应被返回后再读取缓存数据,要么是等待上一个请求超时后(proxy_cache_lock_age指令设置)再发送给代理服务器,要么是等代理缓存锁超时被释放后再发送给代理服务器。缓存锁超时时间由proxy_cache_lock_timeout 指定设置。
Syntax: proxy_cache_lock_age time;
Default: proxy_cache_lock_age 5s;
Context: http, server, location
This directive appeared in version 1.7.8.
设置上一个请求返回响应的超时时间,超时后下一个请求才能发送给代理服务器。
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 的超时时间。超时后,其它请求才能发送给代理服务器,但响应数据不会被缓存。
Syntax: proxy_cache_max_range_offset number;
Default: —
Context: http, server, location
This directive appeared in version 1.11.6.
设置range请求的字节偏移量,单位是字节。如果超出偏移量,range请求将被传递给代理服务器,但响应数据不会被缓存。
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 "字段来重新验证已过期的缓存内容是否仍有效。
Syntax: proxy_connect_timeout time;
Default: proxy_connect_timeout 60s;
Context: http, server, location
设置Nginx与代理服务器尝试建立连接的超时时间。请注意,这个指令限制的是尝试建立连接的超时时间,并不是连接建立成功后的保活时长。默认设置是60秒,但并不是说非要等60秒后才反馈连接建立失败,因为Nginx与后端代理服务器建立连接时,也是通过TCP协议建立的连接,那么就会受内核参数net.ipv4.tcp_syn_retries的影响,如果我们把syn_retries的次数配置的较小(默认配置是5次,大约相当于180秒),Nginx重传SYN报文的次数达到上限并等待完成后,有可能总耗时都不到60秒,此时照样会反馈连接建立失败。如果syn_retries配置的较大,SYN报文重传次数虽未达到上限,但总耗时已达到proxy_connect_timeout指定的时间,此时也会反馈连接建立失败,所以Nginx与代理服务器尝试建立连接的超时时间是取proxy_connect_timeout与SYN报文重传用时的最小值。
实际使用中不建议调整该值,要调整也是调小,不要调大,最大值尽量不要超过75秒。
Syntax: proxy_read_timeout time;
Default: proxy_read_timeout 60s;
Context: http, server, location
设置接收代理服务器响应的超时时间。这个超时并不是接收一个响应的用时时间,而是两次连续接收响应(read操作)的最大间隔时间。当接收完一个响应后,如果在proxy_read_timeout指定时间内未接收到第二次响应,Nginx将关闭该连接。
Syntax: proxy_send_timeout time;
Default: proxy_send_timeout 60s;
Context: http, server, location
设置向代理服务器发送请求的超时时间。同样的,这个超时也不是发送一次请求的用时时间,而是两次连续发送请求(write操作)的最大间隔时间。所以当发送完第一次代理请求后,如果在proxy_send_timeout指定时间内未发送第二次请求,Nginx将关闭该连接。
Syntax: proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | non_idempotent | off ...;
Default: proxy_next_upstream error timeout;
Context: http, server, location
Syntax: proxy_next_upstream_timeout time;
Default: proxy_next_upstream_timeout 0;
Context: http, server, location
This directive appeared in version 1.7.5.
Syntax: proxy_next_upstream_tries number;
Default: proxy_next_upstream_tries 0;
Context: http, server, location
This directive appeared in version 1.7.5.
Syntax: proxy_ssl_certificate file;
Default: —
Context: http, server, location
This directive appeared in version 1.7.8.
Syntax: proxy_ssl_certificate_key file;
Default: —
Context: http, server, location
This directive appeared in version 1.7.8.
Syntax: proxy_ssl_ciphers ciphers;
Default: proxy_ssl_ciphers DEFAULT;
Context: http, server, location
This directive appeared in version 1.5.6.
Syntax: proxy_ssl_conf_command name value;
Default: —
Context: http, server, location
This directive appeared in version 1.19.4.
Syntax: proxy_ssl_crl file;
Default: —
Context: http, server, location
This directive appeared in version 1.7.0.
Syntax: proxy_ssl_name name;
Default: proxy_ssl_name $proxy_host;
Context: http, server, location
This directive appeared in version 1.7.0.
Syntax: proxy_ssl_password_file file;
Default: —
Context: http, server, location
This directive appeared in version 1.7.8.
Syntax: proxy_ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] [TLSv1.3];
Default: proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
Context: http, server, location
This directive appeared in version 1.5.6.
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.
Syntax: proxy_ssl_session_reuse on | off;
Default: proxy_ssl_session_reuse on;
Context: http, server, location
Syntax: proxy_ssl_trusted_certificate file;
Default: —
Context: http, server, location
This directive appeared in version 1.7.0.
Syntax: proxy_ssl_verify on | off;
Default: proxy_ssl_verify off;
Context: http, server, location
This directive appeared in version 1.7.0.
Syntax: proxy_ssl_verify_depth number;
Default: proxy_ssl_verify_depth 1;
Context: http, server, location
This directive appeared in version 1.7.0.
Syntax: proxy_method method;
Default: —
Context: http, server, location
指定转发到代理服务器的请求要使用的HTTP方法(GET/POST/DELETE/UPDATE),而不使用客户端请求中的方法。如果不指定,代理请求方法与客户端的请求方法保持一致。
Syntax: proxy_bind address [transparent] | off;
Default: —
Context: http, server, location
This directive appeared in version 0.8.22.
该指令用于指定Nginx在向后端服务器发送请求时应绑定的本机IP地址,端口号可选。参数值可包含变量。配置为off时,表示不继承上级配置的 proxy_bind,此时,系统将自动分配本地 IP 地址和端口。transparent 是可选参数,表示使用透明代理模式,允许使用非本机IP向代后端服务器发送请求。
proxy_bind $remote_addr transparent;
Syntax: proxy_ignore_headers field ...;
Default: —
Context: http, server, location
Syntax: proxy_limit_rate rate;
Default: proxy_limit_rate 0;
Context: http, server, location
This directive appeared in version 1.7.7.
Syntax: proxy_temp_file_write_size size;
Default: proxy_temp_file_write_size 8k|16k;
Context: http, server, location
Syntax: proxy_cookie_flags off | cookie [flag ...];
Default: proxy_cookie_flags off;
Context: http, server, location
This directive appeared in version 1.19.3.
Syntax: proxy_cookie_flags off | cookie [flag ...];
Default:
proxy_cookie_flags off;
Context: http, server, location
This directive appeared in version 1.19.3.
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.
Syntax: proxy_force_ranges on | off;
Default: proxy_force_ranges off;
Context: http, server, location
This directive appeared in version 1.7.7.
Syntax: proxy_headers_hash_bucket_size size;
Default: proxy_headers_hash_bucket_size 64;
Context: http, server, location
Syntax: proxy_headers_hash_max_size size;
Default: proxy_headers_hash_max_size 512;
Context: http, server, location
Syntax: proxy_ignore_client_abort on | off;
Default: proxy_ignore_client_abort off;
Context: http, server, location
Syntax: proxy_intercept_errors on | off;
Default: proxy_intercept_errors off;
Context: http, server, location
Syntax: proxy_send_lowat size;
Default: proxy_send_lowat 0;
Context: http, server, location
如果将该指令设置为非零,nginx将尝试使用kqueue方法的NOTE_LOWAT标志,或指定大小的SO_SNDLOWAT套接字选项,尽量减少代理服务器的外发连接的发送操作次数。
Linux,Solaris 和 Windows 系统会忽略该指令。
Syntax: proxy_socket_keepalive on | off;
Default: proxy_socket_keepalive off;
Context: http, server, location
This directive appeared in version 1.15.6.
Syntax: proxy_store on | off | string;
Default: proxy_store off;
Context: http, server, location
Syntax: proxy_store_access users:permissions ...;
Default: proxy_store_access user:rw;
Context: http, server, location
Syntax: proxy_max_temp_file_size size;
Default: proxy_max_temp_file_size 1024m;
Context: http, server, location
Syntax: proxy_temp_path path [level1 [level2 [level3]]];
Default: proxy_temp_path proxy_temp;
Context: http, server, location