第一ppt模板网站,劳动节网页设计素材,旅游网页模板下载,怎么才能申请自己的网站本篇文章主要讲ngx_http_proxy_module和ngx_stream_proxy_module模块下各指令的使用方法。
1. 代理请求 proxy_pass
1.1 proxy_pass 代理请求 Syntax: proxy_pass URL; Default: — Context: location, if in location, limit_except 设置代理服务器的协议和地址以… 本篇文章主要讲ngx_http_proxy_module和ngx_stream_proxy_module模块下各指令的使用方法。
1. 代理请求 proxy_pass
1.1 proxy_pass 代理请求 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:5008: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:5008: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 指定了 URINginx 会将原始请求中与location完全匹配的部分替换成指定的URI原始请求URI之后的内容仍保持不变。 再看一个小测试。修改Nginx配置如下去掉location name “/pages/” 后面的“/” location /pages {proxy_pass http://127.0.0.1:8688/test/;} 原始请求URLhttp://47.**.**.80:8688/pagesttt/test/mg.js大胆猜测下Nginx代理请求URL会是什么。 请求请求URLhttp://47.**.**.80:8688/test/ttt/test/mg.js Nginx日志如下 {time_iso8601:2023-12-30T15:23:5408: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:5408: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:1508: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:1508: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:0208: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:0208: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。 1.2 proxy_redirect 代理响应重定向 Syntax: proxy_redirect default; proxy_redirect off; proxy_redirect redirect replacement; Default: proxy_redirect default; Context: http, server, location 该指令用于设置如何处理代理服务器返回的重定向响应301或302响应码。简单直白的理解就是修改后端服务器返回的请求重定向路径避免暴露后端服务器IP和端口。
proxy_redirect default默认配置。当proxy_pass的URL与响应头字段Location的URL部分内容完全匹配时Nginx此时会用server_name listen port 当前location的URI组合起来替换掉Location中与proxy_pass完全匹配的部分。没有完全匹配内容时相当于proxy_redirect off后端服务器返回的Location是什么就给客户端返回什么。proxy_redirect off禁用proxy_redirect功能。后端服务器返回的Location是什么就给客户端返回什么。proxy_redirect redirect replacement指定用什么来替换哪部分内容。 redirect替换哪部分。截取/完全匹配响应头字段Location的URL部分内容。replacement用什么替换。用该值替换掉redirect。该参数可以仅配置URI省略掉HOST和Port如果省略则使用当前server的server_name和listen port80端口除外组合起来代理hostport。
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指令的组合测试
1.3 proxy_http_version Http协议版本 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版本自带的“Connectionkeep-alive”请求体字段来开启HTTP长连接。
1.4 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 在发送代理请求前可通过该指令来新增或修改请求头字段信息。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;
1.5 proxy_set_body 设置请求体 Syntax: proxy_set_body value; Default: — Context: http, server, location 在发送代理请求前可通过该指令来修改请求体信息。 value可包含文本和变量。
1.6 proxy_pass_header 允许传递的响应头 Syntax: proxy_pass_header field; Default: — Context: http, server, location 设置允许将后端服务器返回的响应头中的哪些原本被禁用的字段传递给客户端默认情况下Nginx不会把后端服务器返回的响应头中的“Date”、“Server”、“X-Pad”和“X-Accel-...”等字段返回给客户端。参考proxy_hide_header指令。
1.7 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 指令。
1.8 proxy_pass_request_body 传递请求体 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 ...
}1.9 proxy_pass_request_headers 传递请求头 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 ...
}1.10 proxy_protocol 代理协议 Syntax: proxy_protocol on | off; Default: proxy_protocol off;Context: stream, server This directive appeared in version 1.9.2. 设置在与代理服务器进行通信时是否启用代理协议。
1.11 proxy_requests 接收数据包数量 Syntax: proxy_requests number; Default: proxy_requests 0;Context: stream, server This directive appeared in version 1.15.7. 设置在终止客户端与现有UDP数据流绑定的会话前允许客户端发送的数据包数量。当服务端接收的数据包数量达到该值后将建立新的会话来接收下一个数据包。当所有客户端的数据包都传输到代理服务器并收到指定数量proxy_responses的响应后或者是连接达到超时时间proxy_timeout后会话将终止。设为0表示不受限制。
1.12 proxy_responses 预期响应数据包数量 Syntax: proxy_responses number; Default: —Context: stream, server This directive appeared in version 1.9.13. 如果使用UDP协议设置代理服务器给客户端返回响应时的预期数据包数量。该数字可作为会话终止的提示。默认情况下数据包数量不受限制。如果设为零则客户端不会收到任何响应。但是如果收到响应但会话仍未结束则将处理该响应。
1.13 proxy_session_drop 终止会话 Syntax: proxy_session_drop on | off; Default: proxy_session_drop off;Context: stream, server This directive appeared in version 1.15.8. 当代理服务器从服务器组中删除或被标记为永久不可用后设置是否要终止与该代理服务器建立的所有会话。可能会因为重新解析或使用 API DELETE 命令而发生这种情况。当服务器被认定为不健康或使用 API PATCH 命令时这台服务器将被标记成永久不可用。当客户端或代理服务器处理完下一个read或write事件后每个会话就会终止。
2. 代理缓冲 proxy_buffer 代理缓冲区用于临时存储从后端服务器返回的响应数据。启用代理缓冲时Nginx是等待接收完整个响应后再将其返回给客户端可提高服务器性能和效率。禁用代理缓冲时响应数据是立即同步给客户端响应速度会有所提高适用于对实时性要求较高的场景。
2.1 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 指令禁用这一功能。
2.2 proxy_buffers Syntax: proxy_buffers number size; Default: proxy_buffers 8 4k|8k; Context: http, server, location 该指令用于设置Nginx从后端服务器读取单个连接响应数据的缓冲区数量和大小。默认情况下缓冲区大小等于一个内存页。根据平台不同缓冲区大小为 4K 或 8K。
2.3 proxy_buffer_size Syntax: proxy_buffer_size size; Default: proxy_buffer_size 4k|8k; Context: http, server, location 该指令用于设置Nginx从后端服务器读取响应头数据的缓冲区大小这个缓冲区通常存储一些较小的响应头信息。默认情况下缓冲区大小等于一个内存页。根据平台的不同缓冲区大小为 4K 或 8K。不过它也可以变小。
2.4 proxy_busy_buffers_size Syntax: proxy_busy_buffers_size size; Default: proxy_busy_buffers_size 8k|16k; Context: http, server, location 启用代理服务器响应缓冲后将限制正在忙于给客户端发送响应而代理服务器响应尚未被完全读取的缓冲区总大小。在此期间其余缓冲区可用于读取响应并在必要时将部分响应缓冲到临时文件中。默认情况下size 受 proxy_buffer_size 和 proxy_buffers 指令设置的两个缓冲区大小限制。
2.5 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. 3. 代理缓存 proxy_cache 启用代理缓存后Nginx可以把后端服务器返回的响应数据缓存在磁盘文件中客户端下次请求同一数据时Nginx可以直接返回缓存数据从而提高响应速度减少向后端发送请求的次数降低后端服务器的负载。
3.1 proxy_cache_path 缓存配置 Syntax: proxy_cache_path path [levelslevels] [use_temp_pathon|off] keys_zonename:size [inactivetime] [max_sizesize] [min_freesize] [manager_filesnumber] [manager_sleeptime] [manager_thresholdtime] [loader_filesnumber] [loader_sleeptime] [loader_thresholdtime] [purgeron|off] [purger_filesnumber] [purger_sleeptime] [purger_thresholdtime]; Default: — Context: http 指定缓存的存储路径、目录结构、格式、最大缓存大小和失效时间等参数。
path缓存文件存储路径。缓存文件名是对 cache key 使用 MD5 算法计算后生成的结果。
/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c
[levelslevels]levels[level1]:[level2]:[level3]设置缓存文件存储目录的层数和层级层数最多是3层层级最大是2。
# 层数是2层第一层层级是1第二层层级是2如/data/nginx/cache/7/82
proxy_cache_path /data/nginx/cache levels1:2# 层数是2层第一层层级是2第二层层级是2如/data/nginx/cache/17/28
proxy_cache_path /data/nginx/cache levels2:2# 层数是3层第一层层级是1第二层层级是1第二层层级是2如/data/nginx/cache/7/4/s7
proxy_cache_path /data/nginx/cache levels1:1:2# 层数是3层第一层层级是2第二层层级是1第二层层级是2如/data/nginx/cache/7/43/b8
proxy_cache_path /data/nginx/cache levels1:2:2
keys_zonename:size设置缓存文件键值对的存储共享内存区及大小。所有活动密钥和有关数据信息都存储在共享内存区中共享内存区的名称和大小由 keys_zone 参数配置。1 MB 的区域大约可存储8000个密钥。
proxy_cache_path /data/nginx/cache levels1:2 keys_zonemyCache:10m;[use_temp_pathon|off]设置是否将使用临时文件目录如果开启(on)会将临时文件存放到临时目录中。Nginx缓存代理响应数据时会先将响应数据写入到一个临时文件然后再重命名该文件。从 0.8.9 版开始可以把临时文件和缓存放在不同的文件系统上。但要注意的是在这种情况下文件会在两个文件系统之间复制而不是进行简单的重命名操作。因此建议在任何给定位置都将缓存和由proxy_temp_path 指令设置的临时文件目录放在同一个文件系统中。如果省略该参数或将其值设为 on则将使用 proxy_temp_path 指令为临时文件指定目录。如果设置为 off临时文件将直接存放在缓存目录中建议将 use_temp_path 设置为off这样可避免不必要的数据拷贝。[inactivetime]设置缓存文件的失效时间单位是秒。如果某个缓存文件在inactive指定时间内未被访问则删除该缓存文件默认是10分钟。[max_sizesize]设置缓存空间上限值如果不指定表示不限制缓存大小有可能会占用完所有磁盘空间。[min_freesize]设置缓存空间最小可用值用于清除不常用的缓存。[manager_ ***]当缓存数据总大小超过缓存空间上限值或缓存可用空间不足时系统会删除最近使用最少的数据。数据会在 manager_files、manager_threshold 和 manager_sleep 参数1.11.5配置的迭代中删除。在一次迭代中删除的 manager_files 条目不会超过默认为 100。一次迭代的持续时间受 manager_threshold 参数限制默认为 200 毫秒。在两次迭代之间会有一个由 manager_sleep 参数默认为 50 毫秒设置的暂停。启动一分钟后特殊的 缓存加载器 进程被激活。它将以前存储在文件系统中的缓存数据信息加载到缓存区。加载也是迭代进行的。在一次迭代中加载的加载器文件项不会超过 100 个默认为 100 个。此外一次迭代的持续时间受 loader_threshold 参数的限制默认为 200 毫秒。在两次迭代之间会有一个由 loader_sleep 参数默认为 50 毫秒设置的暂停。 [manager_filesnumber]manager进程每次移除缓存文件数量的上限。[manager_sleeptime]manager进程每次移除缓存文件的时间上限。[manager_thresholdtime]manager进程每次移除缓存后的间隔时间。[loader_filesnumber]重启Nginx载入缓存时每次加载的个数默认100。[loader_sleeptime]每次载入时允许的最大时间上限默认200ms。[loader_thresholdtime]一次载入后停顿的时间间隔默认50ms。
proxy_cache_path /data/nginx/cache levels1:2 keys_zonemyCache:10m max_size1g inactive60m use_temp_pathoff; 另外Nginx商用版还提供以下几个参数
[purgeron|off]指示是否通过缓存清除器1.7.12从磁盘中删除与通配符匹配的缓存条目。将该参数设置为开默认为关将激活 缓存清除器 进程永久遍历所有缓存条目并删除与通配符键匹配的条目。[purger_filesnumber]设置一次迭代1.7.12中扫描的项目数。默认情况下purger_files 设置为 10。[purger_thresholdnumber]设置一次迭代的持续时间1.7.12。默认情况下purger_threshold 设置为 50 毫秒。[purger_sleepnumber]设置迭代之间的暂停时间1.7.12。默认情况下purger_sleep 设置为 50 毫秒。
3.2 proxy_cache 开启缓存 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;
3.3 proxy_cache_valid 缓存有效期 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;默认情况下缓存文件会永久保存除非缓存数据总量超过了缓存上限值或最小可用空间不足时才会清理不常用的缓存文件。
3.4 proxy_cache_key 缓存维度/键值 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;3.5 proxy_no_cache 不被缓存 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;
3.6 proxy_cache_bypass 不读缓存 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;3.7 proxy_cache_min_uses 最少请求次数 Syntax: proxy_cache_min_uses number; Default: proxy_cache_min_uses 1; Context: http, server, location 设置代理请求达到指定请求次数后才对其响应进行缓存防止低频请求的响应数据被缓存。
3.8 proxy_cache_purge 清除指定请求的缓存 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.gztar -xf ngx_cache_purge-2.3.tar.gz cd nginx-1.12.2./configure --prefix/usr/local/nginx --usernginx --groupnginx --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
3.9 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. 指定哪些请求方法的响应数据会被缓存如果客户端请求方法在该指令值队列中则响应将被缓存。Nginx默认始终缓存GET和 HEAD方法的响应数据虽然GET 和 HEAD 方法总会被添加到该指令值队列中但在配置时还是建议明确指定它们。
3.10 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 | http_429 | off ...; Default: proxy_cache_use_stale off; Context: http, server, location 设置在什么情况下可以使用旧缓存如服务端返回500或404错误信息等或者是Nginx正在更新旧缓存那么这时候Nginx可以选择是否要把旧缓存数据返回给客户端。可配合 proxy_next_upstream 指令一起使用。
3.11 proxy_cache_background_update 后台更新缓存 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向上游主动发送请求来更新过期缓存。请注意在更新过期缓存响应时有必要允许使用过期缓存响应。
3.12 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 方法进行缓存。禁用转换时proxy_cache_key 指令配置内容应包含 $request_method。
3.13 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. 设置是否开启代理缓存锁。启用后如果同一时间内有多个相同cache key的代理请求需要发送给代理服务器那么此时只允许一个按序选择最靠前的请求发送给代理服务器而其它请求要么是等待上一个请求的响应被返回后再读取缓存数据要么是等待上一个请求超时后proxy_cache_lock_age指令设置再发送给代理服务器要么是等代理缓存锁超时被释放后再发送给代理服务器。缓存锁超时时间由proxy_cache_lock_timeout 指定设置。
3.14 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. 设置上一个请求返回响应的超时时间超时后下一个请求才能发送给代理服务器。
3.15 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 的等待超时时间。超时后其它请求才能发送给代理服务器但响应数据不会被缓存。
3.16 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. 设置range请求的字节偏移量单位是字节。如果超出偏移量range请求将被传递给代理服务器但响应数据不会被缓存。
3.17 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 字段来重新验证已过期的缓存内容是否仍有效。
4. 超时时间 timeout
4.1 proxy_timeout 连接超时时间 Syntax: proxy_timeout timeout; Default: proxy_timeout 10m;Context: stream, server 设置客户端或代理服务器连接上两次连续read或write操作之间的超时时间。如果在这段时间内没有数据传输连接就会关闭。 类似于keepalive_timeout。
4.2 proxy_connect_timeout 建立连接超时 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秒。
4.3 proxy_read_timeout 接收响应超时 Syntax: proxy_read_timeout time; Default: proxy_read_timeout 60s; Context: http, server, location 设置接收代理服务器响应的超时时间。这个超时并不是接收一个响应的用时时间而是两次连续接收响应read操作的最大间隔时间。当接收完一个响应后如果在proxy_read_timeout指定时间内未接收到第二次响应Nginx将关闭该连接。
4.4 proxy_send_timeout 发送请求超时 Syntax: proxy_send_timeout time; Default: proxy_send_timeout 60s; Context: http, server, location 设置向代理服务器发送请求的超时时间。同样的这个超时也不是发送一次请求的用时时间而是两次连续发送请求write操作的最大间隔时间。所以当发送完第一次代理请求后如果在proxy_send_timeout指定时间内未发送第二次请求Nginx将关闭该连接。
5. 使用下一台上游服务器 proxy_next_upstream 当向一台上游服务器发送代理请求出错或无响应内容时可认定该服务器异常此时Nginx可通过配置 proxy_next_upstream 指令来选择是否要换下一台上游服务器继续处理当前这个请求向下一台服务器发送请求可能还要受尝试次数proxy_next_upstream_tries和时间proxy_next_upstream_timeout的限制。具体说明请参考5.4章节。
5.1 proxy_next_upstream 尝试下一台服务器 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 指定在哪种情况下可以将请求转发给下一台上游服务器继续进行处理。需要注意的是只有在尚未向客户端发送任何内容的情况下才能将请求传递给下一个服务器。也就是说如果在传输响应的过程中出现错误或超时则无法修复。 该指令还定义了与服务器通信失败的判定标准。error、timeout 和 invalid_header 会始终被视为通信失败即使指令中没有指定它们。只有在该指令中指定了 http_500、http_502、http_503、http_504 和 http_429 的情况下它们才会被视为通信失败而http_403 和 http_404 永远不会被视为通信失败。
error在与上游服务器建立连接、发送请求或读取响应头时发生错误timeout在与上游服务器建立连接、发送请求或读取响应头时发生超时invalid_header上游服务器返回空响应或无效响应http_500上游服务器返回的响应码为500http_502上游服务器返回的响应码为502http_503上游服务器返回的响应码为503http_504上游服务器返回的响应码为504http_404上游服务器返回的响应码为404http_429上游服务器返回的响应码为429non_idempotent通常情况下如果请求已发送到上游服务器1.9.13那么使用non-idempotent方法POST、LOCK、PATCH的请求不会传递给下一台服务器启用该选项后可以明确允许重试此类请求。off禁止将请求传递给下一台上游服务器。
5.2 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_timeout 10s;
5.3 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_next_upstream_timeout 时间范围内最多允许尝试 proxy_next_upstream_tries 次含第一次。
proxy_next_upstream_tries 2;
5.4 综合说明已测试
proxy_next_upstream error timeout http_500;
proxy_next_upstream_timeout 10s;
proxy_next_upstream_tries 5; 假设我们针对某一server或location配置了多台后端服务器Nginx首次转发请求给第一台服务器后返回的响应码为500此时Nginx把请求转发给Next Server可用server指令中的max_fails、fail_timeout参数设置进行处理并开启一个计时器时间设定为proxy_next_upstream_timeout指令配置的值。如果Next Server返回的响应码还是500则继续将请求转发给Next Next Server直到满足以下任意一个条件Nginx才会停止转发并将最终的响应结果返回给客户端
计时时间超过了proxy_next_upstream_timeout设定的时间也就是我们上面配置的10秒向Next Server转发的次数达到了proxy_next_upstream_tries设定的次数限制也就是我们上面配置的5次响应结果不满足proxy_next_upstream指定设定的条件比如返回结果是404或301所有可用后端服务器都被尝试请求过了不管最后一个服务器返回的响应是什么都会停止转发。
Q如果后端服务器只有3个每个服务器的失败尝试次数为1 不可用时长是20秒proxy_next_upstream_tries 5会尝试请求几次
A如果请求第一台服务器返回500则转发请求给第二台可用服务器如果第二台服务器还是返回500则再请求第三台可用服务无论第三台服务器返回结果是什么都会终止请求并将结果返回给客户端具体给客户端返回什么样的响应还要看proxy_intercept_errors和error_page指令的配置结果。此时配置的proxy_next_upstream_timeout和proxy_next_upstream_tries将失效。也就是服务器不会被循环再次请求。请注意如果请求完第一台服务器后返回500而后面的服务器在fail_timeout时间内都被判定为不可用那么就不再尝试转发请求给其他服务器retry次数为0直接将第一台服务器的响应返回给客户端。
6. 代理服务器SSL验证 proxy_ssl
6.1 proxy_ssl_certificate Syntax: proxy_ssl_certificate file; Default: — Context: http, server, location This directive appeared in version 1.7.8. 与ssl_certificate指令一样指定包含 PEM 格式证书的文件用于代理 HTTPS 服务器的身份验证。
6.2 proxy_ssl_certificate_key Syntax: proxy_ssl_certificate_key file; Default: — Context: http, server, location This directive appeared in version 1.7.8. 与ssl_certificate_key指令一样指定包含 PEM 格式秘钥的证书文件用于代理 HTTPS 服务器的身份验证。
6.3 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. 与ssl_ciphers指令一样指定对代理请求 HTTPS 服务器启用的密码。密码以 OpenSSL 库能理解的格式指定。具体配置可参考 Module ngx_http_ssl_module
6.4 proxy_ssl_conf_command Syntax: proxy_ssl_conf_command name value; Default: — Context: http, server, location This directive appeared in version 1.19.4. 与ssl_conf_command指令一样在与代理 HTTPS 服务器建立连接时设置任意 OpenSSL 配置命令。 同一配置层中可以指定多个 proxy_ssl_conf_command 指令。只有在当前配置层没有定义 proxy_ssl_conf_command 指令时这些指令才会继承上一级配置。
6.5 proxy_ssl_crl Syntax: proxy_ssl_crl file; Default: — Context: http, server, location This directive appeared in version 1.7.0. 与ssl_crl指令一样指定用于验证代理 HTTPS 服务器的 PEM 格式的已撤销证书(CRL)。
6.6 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 的Host部分。
6.7 proxy_ssl_password_file Syntax: proxy_ssl_password_file file; Default: — Context: http, server, location This directive appeared in version 1.7.8. 与ssl_password_file指令一样指定一个包含密钥口令的文件每个口令单独一行。在加载密钥时会依次尝试使用口令。
6.8 proxy_ssl_protocols 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. 与ssl_protocols指令一样为向代理 HTTPS 服务器发出的请求启用指定协议。
6.9 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 服务器名称指示扩展SNIRFC 6066传递服务器名称。
6.10 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 failedSSL3_GET_FINISHED:摘要检查失败错误请尝试禁用会话重用。
6.11 proxy_ssl_trusted_certificate Syntax: proxy_ssl_trusted_certificate file; Default: — Context: http, server, location This directive appeared in version 1.7.0. 与ssl_trusted_certificate指令一样指定用于验证代理 HTTPS 服务器证书的 PEM 格式可信 CA 证书的文件。
6.12 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 服务器证书验证。
6.13 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. 与ssl_verify_depth指令一样设置代理 HTTPS 服务器证书链的验证深度。
7. proxy_socket_keepalive TCP保活 Syntax: proxy_socket_keepalive on | off; Default: proxy_socket_keepalive off; Context: http, server, location This directive appeared in version 1.15.6. 设置是否开启与代理服务器间的TCP保活机制类似于listen指令中的so_keepalive参数。如果设置为on表示开启socket将打开SO_KEEPALIVE选项参数使用系统内核参数。
8. proxy_method 代理请求方法 Syntax: proxy_method method; Default: — Context: http, server, location 指定转发到代理服务器的请求要使用的HTTP方法GET/POST/DELETE/UPDATE而不使用客户端请求中的方法。如果不指定代理请求方法与客户端的请求方法保持一致。
9. proxy_bind 绑定地址 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;10. proxy_ignore_headers 忽略响应头 Syntax: proxy_ignore_headers field ...; Default: — Context: http, server, location 后端服务器返回的响应中某些响应头字段可能会影响Nginx的行为可通过该指令来设置Nginx可忽略处理响应头中的哪些字段。可忽略以下字段 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执行内部重定向到指定 URIX-Accel-Limit-Rate 设置向客户端传输响应的速率限制X-Accel-Buffering启用或禁用响应缓冲X-Accel-Charset设置所需的响应字符集。
11. proxy_ignore_client_abort 是否关闭连接 Syntax: proxy_ignore_client_abort on | off; Default: proxy_ignore_client_abort off; Context: http, server, location 设置当客户端关闭连接而不再等待响应时是否应关闭与代理服务器的连接。
12. limit_rate 限速
12.1 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. 限制从代理服务器读取响应的速率。速率以每秒字节数为单位。设为0时将禁用速率限制。该指令限制的是单个连接的速率如果 nginx 同时打开两个连接到代理服务器总速率将是限定速率的两倍。只有启用了代理服务器响应缓冲后该限制才会生效。
12.2 proxy_download_rate 限制读取服务端速率 Syntax: proxy_download_rate rate; Default: proxy_download_rate 0;Context: stream, server This directive appeared in version 1.9.3. 限制从代理服务器读取响应的速率。速率以每秒字节数为单位。设为0时将禁用速率限制。该指令限制的是单个连接的速率如果 nginx 同时打开两个连接到代理服务器总速率将是限定速率的两倍。 参数值可包含变量1.17.0。可根据不同条件做出不同限速
map $slow $rate {1 4k;2 8k;
}
proxy_download_rate $rate;
12.3 proxy_upload_rate 限制读取客户端速率 Syntax: proxy_upload_rate rate; Default: proxy_upload_rate 0;Context: stream, server This directive appeared in version 1.9.3. 限制从客户端读取数据的速率。速率以每秒字节数为单位。设为0时将禁用速率限制。该指令限制的是单个连接的速率如果客户端同时打开两个连接到 nginx 总速率将是限定速率的两倍。 参数值可包含变量1.17.0。可根据不同条件做出不同限速
map $slow $rate {1 4k;2 8k;
}
proxy_upload_rate $rate;
13. proxy_cookie
13.1 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属性设置应替换的文本匹配不区分大小写。假设代理服务器返回的响应头Set-Cookie 字段的domain属性为domainlocalhost可以将该指令配置为
# 把localhost更改为实际域名返回给客户端
proxy_cookie_domain localhost example.org;
domain属性将被重写为“domainexample.org” 。 如果domain和replacement字符串以点.开头那么domain属性将被忽略。
# domain和replacement参数可包括变量。
proxy_cookie_domain www.$host $host; 该指令也可以使用正则表达式指定。此时domain应以“~”符号开头。正则表达式可以包含命名捕获和位置捕获replacement可以引用它们
proxy_cookie_domain ~\.(?Psl_domain[-0-9a-z]\.[a-z])$ $sl_domain;# 同一配置层可同时配置多个proxy_cookie_domain指令如果一个 cookie 匹配到多个该指令则选择第一个匹配到的。
proxy_cookie_domain localhost example.org;
proxy_cookie_domain ~\.([a-z]\.[a-z])$ $1;参数off表示禁用proxy_cookie_domain功能且当前配置层级所有proxy_cookie_domain配置也会失效。
proxy_cookie_domain off;
proxy_cookie_domain localhost example.org;
proxy_cookie_domain www.example.org example.org;13.2 proxy_cookie_flags Syntax: proxy_cookie_flags off | cookie [flag ...]; Default: proxy_cookie_flags off; Context: http, server, location This directive appeared in version 1.19.3. 为 cookie 设置一个或多个flags。cookie 可以包含文本、变量及其组合。flag 可包含文本、变量及其组合1.19.8。secure、httponly、samesitestrict、samesitelax、samesitenone 参数会添加相应的标志。nosecure、nohttponly、nosamesite 参数会删除相应标记。 也可以使用正则表达式指定 cookie在这种情况下cookie 应以~符号开头。
# 同一配置层可同时配置多个proxy_cookie_flags指令如果一个cookie匹配到多个该指令则选择第一个匹配到的。
# 表示将 httponly 标志添加到 cookie “one”中
proxy_cookie_flags one httponly;
# 而对于所有其他 cookie则会添加 samesitestrict 标记并删除 secure 标记。
proxy_cookie_flags ~ nosecure samesitestrict; 参数off表示禁止向cookie中添加flag且不会继承上一层级的配置。
13.3 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属性设置应替换的文本。假设代理服务器返回的响应头Set-Cookie 字段的path属性为path/two/some/uri/可以将该指令配置为
proxy_cookie_path /two/ /;
path属性将被重写为“path/some/uri/” 。
# path和 replacement 参数可包含变量
proxy_cookie_path $uri /some$uri;该指令也可以使用正则表达式指定。此时path应以~符号开头区分大小写或以~*符号开头不区分大小写。正则表达式可以包含命名捕获和位置捕获replacement可以引用它们
proxy_cookie_path ~*^/user/([^/]) /u/$1;# 同一配置层可同时配置多个proxy_cookie_path指令如果一个cookie匹配到多个该指令则选择第一个匹配到的。
proxy_cookie_path /one/ /;
proxy_cookie_path / /two/;参数off表示禁用proxy_cookie_path功能且当前配置层级所有proxy_cookie_path配置也会失效。
proxy_cookie_path off;
proxy_cookie_path /two/ /;
proxy_cookie_path ~*^/user/([^/]) /u/$1;14. proxy_force_ranges 强制range请求 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 字段值是什么Nginx都可选择是否开启byte-range功能来缓存或不缓存响应数据默认是不开启。
15. 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 指令使用的哈希表设置存储桶的大小。
16. 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 指令使用的哈希表设置存储桶的最大值。
17. proxy_intercept_errors 拦截error Syntax: proxy_intercept_errors on | off; Default: proxy_intercept_errors off; Context: http, server, location 设置是否拦截代理服务器返回的响应码大于300的响应如果开启拦截则重定向到由Nginx配置的error_page页面如果不拦截则直接返回原始响应给客户端。默认是不拦截给客户端返回原始响应。
18. proxy_send_lowat Syntax: proxy_send_lowat size; Default: proxy_send_lowat 0; Context: http, server, location 如果将该指令设置为非零nginx将尝试使用kqueue方法的NOTE_LOWAT标志或指定大小的SO_SNDLOWAT套接字选项尽量减少代理服务器的外发连接的发送操作次数。 LinuxSolaris 和 Windows 系统会忽略该指令。
19. proxy_store 持久保存文件 Syntax: proxy_store on | off | string; Default: proxy_store off; Context: http, server, location 设置是否将文件保存到磁盘。如果设置为on文件将保存到 alias 或 root 指令指定的路径下。另外还可以使用带有变量的字符串明确设置文件名
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;
}
20. 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;
21. proxy_temp_file_write_size 单次最多写入 Syntax: proxy_temp_file_write_size size; Default: proxy_temp_file_write_size 8k|16k; Context: http, server, location 当启用将代理服务器响应数据写入临时文件use_temp_pathon时该指令用于限制每次写入临时文件的数据大小。默认情况下大小受 proxy_buffer_size 和 proxy_buffers 指令设置的两个缓冲区限制。临时文件的最大大小由 proxy_max_temp_file_size 指令设置。
22. proxy_max_temp_file_size 临时文件最大值 Syntax: proxy_max_temp_file_size size; Default: proxy_max_temp_file_size 1024m; Context: http, server, location 限制临时文件的最大值默认是1024M。
23. proxy_temp_path 临时文件目录 Syntax: proxy_temp_path path [level1 [level2 [level3]]]; Default: proxy_temp_path proxy_temp; Context: http, server, location 设置临时文件的存放目录默认是Nginx安装目录下的proxy_temp目录。最多可指定三层子目录类似于proxy_cache_path指令中的levels参数。
24.可用参数
$proxy_host代理服务器的名称和端口如 proxy_pass 指令所指定$proxy_portproxy_pass 指令中指定的代理服务器端口或协议默认端口$proxy_add_x_forwarded_for客户端请求头中的 X-Forwarded-For 字段并附加 $remote_addr 变量以逗号分隔。如果客户端请求头中没有 X-Forwarded-For 字段则 $proxy_add_x_forwarded_for 变量等于 $remote_addr 变量。