# 反向代理简介 反向代理(reverse proxy)其实就是相当于服务器,这个服务器成为了客户端和上游服务器(upstream server)的连接者。也可以看作是客户端请求的终结者,重新新一个连接到上游服务器的新连接。 一个经典的配置 ``` location /uri { prxoy_pass http://localhost:8000/newuri; } ``` 当客户端请求uri的时候,proxy_pass代表着上游服务器接收的形式。 一个客户端请求想顺利地来到上游服务器,需要满足两个条件: 1. 路由地址匹配 2. 没有重写模块 以下包括了重写模块 ``` location / { rewrite /(.*)$ /index.php?page=$1 break; proxy_pass http://localhost:8000/index; } ``` 以上,proxy_pass中的配置就不会生效。 # 代理模块 | 指令 | 说明 | | ----------------------------- | ------------------------------------------------------------ | | proxy_connect_timeout | 从接收请求到连接至上游服务器的等待时间 | | proxy_cookie_domain | 替代上游服务器来的`Set-Cookie`头中的`domain`属性,`domain`属性值通常会被替换成一个字符串、正则表示、变量 | | proxy_cookie_path | 替代上游服务器来的`Set-Cookie`中的`path`属性 | | proxy_header_hash_bucket_size | 请求头的最大值 | | proxy_hide_headeer | | | proxy_http_version | 使用的`HTTP`协议版本, `keepalive`连接就使用1.1 | | proxy_ignore_client_abort | 当设置为`on`, `Nginx`不会放弃同上游服务器的连接 | | proxy_ignore_headers | | | proxy_intercept_errors | 启用显示配置的eror_page错误,而不显示来自上游服务器的直接响应 | | proxy_max_temp_file_size | 当响应与内存缓冲区不匹配时,该指令给出溢出文件的最大值 | | proxy_pass | | | proxy_pass_header | 覆盖`proxy_hide_header`中的设置,允许这些头传递到客户端 | | proxy_pass_request_body | 如果设置为`off`,那么指令将会组织请求体发送到上游服务器 | | proxy_pass_request_headers | 如果设置为`off`,那么指令将会组织请求头发送到上游服务器 | | proxy_read_timeout | 连接关闭前从上游服务器两次成功读操作耗时。如果上游服务器处理慢,这里设置高些。 | | proxy_redirect | 重写来之上游服务器的`Location`和`Refresh`头,对于某些应用程序框架有用 | | proxy_send_timeout | 在请求关闭之前,向上游服务器两次写成功操作完成所需要的时间 | | proxy_set_body | 发送到上游服务器的请求体在这里被改写 | | proxy_set_header | | | proxy_temp_file_write_size | 限制同一时间内缓冲到一个临时文件的数据量 | | proxy_temp_path | 设定目录的层次 | # 带有cookie的遗留应用程序 在一个共同的端点服务器后放置多个遗留应用程序。 # upstream模块 | 指令 | 说明 | | ---------- | ------------------------------------------------------------ | | ip_hash | 根据ip地址的哈希值确保客户端均匀地连接所有服务器。键值基于c类地址 | | keepalive | 指定每一个worker进程缓存到上游服务器的连接数。使用HTTP连接时,proxy_http_version设置为1.1,并且将proxy_set_header设置为Connection "" | | least_conn | 激活负载均衡算法,将请求发送到活跃连接数最少的那台服务器 | | server | 为upstream定义一个服务器地址,带有TCP端口号的域名,IP地址,或者UNIX域套接字。参数包括:weight, max_fails, fail_timeout, backup,down | # 保持活动连接 `Nginx`会为每一个worker进程保持同上游服务器的连接。如果`Nginx`与上游服务器通过HTTP/1.1进行对话,那么`NginX`会使用HTTP/1.1协议的持久连接机制维护这些打开的连接。 ``` upstream apche { server 127.0.0.1:8080; keepalive 32; } location / { proxy_http_version 1.1; proxy_set_header Connection ""; proxy_pass http://apche; } ``` # 负载均衡 三种负载均衡算法。 # 使用错误文件处理上游服务器问题 当上游服务器无法响应请求,提供对外展示的错误文件。