共计 8012 个字符,预计需要花费 21 分钟才能阅读完成。
nginx 正向代理与反向代理说明图
超级形象说明
正向代理指令:
1, resolver
这个用于 DNS 服务器的 ip . DNS 服务器的主要工作是进行域名解析, 将域名映射为对应 IP 地址
resolver address … [valid = time]
address , DNS 服务器的 ip 地址, 不指定的话默认 53
time 设置数据包在网络中的有效时间.
例: resolver 127.0.0.1 [::1]:52113 valids
2, resolver_timeout
设置 DNS 服务器域名解析超时时间
语法结构: resolver_timeout time;
3, proxy_pass
设置代理服务器的协议和地址, 可以用于反向代理服务
proxy_pass URL
URL 为设置的代理服务器协议和地址
反向代理基本指令
1, proxy_pass
设置代理服务器的协议和地址
proxy_pass URL
URL 为设置的代理服务器协议和地址
使用这个指令时要注意:
如果指令 URL 中变量不含有 URI 转向地址会只改变 URL
如果指令 URL 中变量含有 URI 转向地址会全部改变
如果配置指令 url 后面带有 / 那么跳转同理
2, proxy_hide_header 指令
用于设置 Nginx 服务器发送 http 相应时, 隐藏一些头域信息
proxy_hide_header field;
field 为需要隐藏的头域. 可以用于 http server localtion
3,proxy_pass_header 指令
默认 Nginx 服务器在发送响应报文时, 报文不包含 date server X-accel 等来自被代理服务器的头域信息,
该指令可以设置这些头域信息已被发送
proxy_pass_header filed;
field 为需要隐藏的头域. 可以用于 http server localtion
4, proxy_pass_request_body
配置是否将客户端请求体发送给代理服务器
proxy_pass_request_body on | off 可以用于 http server localtion
5,proxy_pass_request_header
配置是否将客户端的请求头发送给代理服务器
proxy_pass_request_header 可以用于 http server localtion
6, proxy_set_header
用于更改 Nginx 服务器接收到的客户端请求的请求头, 然后将新的请求头发送给被代理服务器
proxy_set_header filed value
field 要更改的信息所在的头域
value 更改的值
7, proxy_set_body
更改 Nginx 服务器接收到的客户端请求的请求体信息, 然后将新的请求体发送给被代理的服务器
proxy_set_body value
value 为更改的信息
8, proxy_bind
强制将与代理主机的连接绑定到指定的 ip 主机
proxy_bind address
address 为 IP 地址
9, proxy_connect_timout
用于配置 Nginx 服务器与后端被代理服务器尝试连接的超时时间
proxy_connect_timout time 默认时间时 60 秒
10, proxy_read_timeout
用于配置 Nginx 服务器向后端被代理服务器 (组) 发出 read 请求后, 等待响应的超时时间
proxy_read_timeout time; 默认时间时 60 秒
11, proxy_send_timeout
用于配置 Nginx 服务器向后端被代理服务器 (组) 发出 write 请求后, 等待响应的超时时间
proxy_send_timeout time;默认时间时 60 秒
12, proxy_http_version
用于设置 Nginx 服务器提供代理服务器的 HTTP 协议版本
proxy_http_version 1.0 | 1.1 |2.0
13, proxy_method
用于设置 Nginx 服务器请求贝代理服务器使用的请求方法, 设置了这个客户端的请求方法将会被忽略
proxy_method method
method 设置 POST | GET
14 proxy_ignore_client_abort
用于设置在客户端中断网络请求的时候,Nginx 服务器是否中断对被代理服务器的请求,
proxy_ignore_client_abort on | off
15, proxy_ignore_headers
用于设置一些 HTTP 相应头的头域,
proxy_ignore_headers filed …
filed 为要设置的 HTTP 相应头的头域信息, 例如 ”X-Accel-Redirect” “X-Accel-Expires” “Expores ” “Cache-Control ” “Set-Cookie”
16, proxy_redirect
用于修改被代理服务器返回的相应头中的 location 和 Refresh 与 proxy_pass 指令配合使用
语法结构:
proxy_redirect redirect replacement
proxy_redirect default
proxy_redirect off
redirect 匹配 localtion 头域值的字符串
replacement 用于替换 redirect 变量的字符串
假设前端 url 是 example.com。后端 server 域名是 csdn123.com,那么后端 server 在返回 refresh 或 location 的时候,host 为 csdn123.com,显然这个信息直接返回给客户端是不行的,需要 nginx 做转换,这时可以设置:
proxy_redirect http:
//csdn123.com
nginx 会将 host 及 port 部分替换成自身的 server_name 及 listen port。不过这种配置对 server_name 有多个值的情况下支持不好。
我们可以用 nginx 内部变量来解决这一问题:
proxy_redirect http:
//csdn123.com http://$host:$server_port
17, proxy_intercept_errors
配置一个状态的开启或者关闭
proxy_intercept_errors on | off
18, proxy_headers_hash_max_size
存放 HTTP 报文头的哈希表的容量
proxy_headers_hash_max_size size; 默认大小 512
19, proxy_headers_hash_bucket_size
Nginx 服务器申请存放 HTTP 报文头的哈希表容量的单位大小
proxy_headers_hash_max_size 64;
20, proxy_next_upstream
如果 Nginx 定义了 upstream 后端服务器组,如果组内有异常情况,将请求顺次交给下一个组内服务器处理
proxy_next_upstream status...
status: error,timeout,invalid_header,http_500 502 503 504 404,off
21, proxy_ssl_session_reuse
该指令用于配置是否使用基于 SSL 安全协议的会话连接(htts://)被代理服务器,
proxy_ssl_session_reuse on | off;
默认 on
Proxy Buffer 指令详解:
22, proxy_buffering
用于配置是否启用或者关闭 proxybuff
proxy_buffering on | off
�� 23, proxy_buffers
用于配置接收一次被代理服务器响应数据的 Proxy Buffer 个数和每个 Buffer 的大小.
proxy_buffers number size;
size 一般设置为内存页大小. 根据平台的不同, 取值可能为 4KB 或者 8KB
proxy_buffers 8 4KB|8KB;
24, proxy_buffer_size
用于配置从被代理服务器获取的第一部分响应数据的大小, 默认为 4k 或者 8k, 保持与 proxy_buffers 指令中的 size 变量相同.
25. proxy_busy_buffers_size
用于限制同时处于 BUSY 状态的 Proxy Buffer 的总大小.
proxy_busy_buffers_size size;
size 为设置处于 BUSY 状态的缓存区总大小. 默认为 8KB 或者 16KB.
26. proxy_temp_path
用于配置磁盘上的一个文件路径, 用于临时存放被代理服务器的大体积响应数据. 如果 Proxy Buffer 被装满后, 响应数据仍然没有被 Nginx 服务器完全接收, 之后响应的数据就会被临时存放在该文件中. 语法结构为:
proxy_temp_path path [level1 [level2 [level3]]]
* path 磁盘上临时存放文件的路径
* levelN 缓存文件存放在设置的路径的第几级 hash 目录中
27. proxy_max_temp_file_size
用于设置所有临时文件的总大小.
proxy_max_temp_file_size size;
默认为:1024MB
28. proxy_temp_file_write_size
用于配置同时写入临时文件的数据量的总大小
proxy_temp_file_write_size size;
默认设置根据平台的不同, 可以为 8KB 或者 16KB, 一般与平台的内存也大小相同.
Proxy Cache 配置指令
29, proxy_cache
用于配置一块公用的内存区域的名称, 该区域可以存放缓存的索引数据. 这些数据在 Nginx 服务器启动时由缓存索引重建进程负责建立, 在 Nginx 服务器的整个运行过程中由缓存管理进程负责定时检查过期数据、检索等管理工作. 语法结构为:
proxy_cache zone | off;
zone 设置用于存放缓存索引的内存区域的名称
off 关闭 proxy_cache 功能, 默认设置
30, proxy_cache_bypass
用于配置 Nginx 在响应客户端时不从缓存中获取数据的条件. 语法结构为:
proxy_cache_bypass string …;
其中,string 为条件变量, 支持配置多个, 当至少有一个字符串指令不为空或者不等于 0 时, 响应数据不从缓存中获取.
例子:
proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment $http_pragma $http_authorization;
31, proxy_cache_key
用于配置 Nginx 服务器在内存中为缓存数据建立索引时使用的关键字. 默认为:
proxy_cache_key $scheme$proxy_host$uri$is_args$args
proxy_cache_lock
用于配置是否开启缓存的锁功能. 在缓存中, 某些数据项可以同时被多个请求返回的响应数据填充, 开启该功能后,Nginx 服务器同时只能有一个请求填充缓存中的某一数据项. 如果其他请求也想填充该数据项, 必须等待该数据项的锁被释放. 这个等待的时间由 proxy_cache_lock_timeout 指令设置.
默认值为 off, 表示关闭锁功能.
32 , proxy_cache_lock_timeout
用于配置开启锁功能以后锁的超时时间. 默认为 5s.
33, proxy_cache_in_uses
当客户端向被代理的服务器发送相同的请求达到该指令设定的次数后,Nginx 服务器才对该其更年期的响应数据做缓存. 默认为 1
34, proxy_cache_path
用于设置 Nginx 服务器存储缓存数据的路径以及和缓存索引相关的内容, 语法结构为:
proxy_cache_path path [levels=levels] keys_zone=name:size1 [inactive=time1] [max_size=size2] [loader_files=number] [loader_sleep=time2] [loader_threshold=time3];
path 设置缓存存放的根路径
levels 设置相对于 path 指定目录的第几级 hash 目录中缓存数据.levels=1, 表示一级 hash 目录;levels=1:2, 表示两极目录, 以此类推. 该目录是基于请求 URL 通过哈希算法得到的.
name:size1 Nginx 服务器的缓存索引重建进程在内存中为缓存数据建立索引, 这一对变量用来设置存放缓存索引的内存区域的名称和大小.
time1 设置强制更新缓存数据的时间, 当缓存数据在设定的时间内没有被访问时,Nginx 服务器就强制从硬盘上将其删除, 下次客户端访问该数据时重新缓存. 默认为 10s.
size2 设置缓存数据大小. 当缓存的大小超过该变量的设置时, 索引管理进程将根据最近最少被访问的策略删除缓存.
number 设置缓存索引重建进程每次加载的数据元素的数量上限. 默认为 100
time2 设置缓存索引重建进程在一次遍历结束后下一次遍历开始之间暂停的时长, 默认为 50ms.
time3 设置遍历一次磁盘缓存源数据的时间上限. 默认为 200ms.
该指令比较复杂, 一般需要设置前面 3 个指令的情形比较多, 后面几个变量与 Nginx 服务器缓存索引重建进程以及管理进程性能有关, 一般情况下保持默认设置就可以了.
例子:
proxy_cache_path /data/nginx/cache/a levels=1 keys_zone=a:10m;
proxy_cache_path /data/nginx/cache/b levels=2:2 keys_zone=b:100m;
proxy_cache_path /data/nginx/cache/c levels=1:1:2 keys_zone=c:1000m;
== 该指令只能放在 http 块中 ==
35 proxy_cache_use_stale
指定在那种情况下, 当被代理的服务器无法访问或者访问错误等现象时,Nginx 服务器可以使用历史缓存响应客户端的请求. 语法结构为:
proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | off …;
默认为 off
36, proxy_cache_valid
该指令可以针对不能的 HTTP 响应状态设置不同的缓存时间, 语法结构为:
proxy_cache_valid [code …] time;
code 设置 HTTP 响应的状态码, 可选, 默认只为响应吗是 200 301 302 的响应数据做缓存. 可以使用‘any’表示缓存所有该指令中未设定的其他响应数据
time 缓存时间
例子:
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 10m;
第三个例子表示对返回状态为不是 200 301 302 的响应数据缓存 10 分钟.
37 proxy_no_cache
配置在什么情况下不使用 cache 功能. 语法结构为:
proxy_no_cache string …;
其中,string 可以是一个或者多个变量, 当 string 的值不为空或者不为’0’时, 不启用 cache 功能.
38 proxy_store
配置是否在本地磁盘缓存来自被代理服务器的响应数据. 语法结构为:
39 proxy_store on | off | string;
on | off 设置是否开启 Proxy Store 功能. 如果开启, 缓存文件会存放到 alias 指令或 root 指令设置的本地路径. 默认为 off
string 自定义缓存文件存放路径. 使用该配置时, 默认开启 Proxy Store.
40 proxy_store_access
用于设置用户或用户组对 Proxy Store 缓存文件的访问权限, 语法结构为:
proxy_store_access users:permissions …;
users 可以设置为 user、group 或者 all
permission 设置方位权限
例子:
proxy_store on;
proxy_store_access user:rw group:rw all:r;
root /data/www;
: