|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- # 反向代理简介
-
- 反向代理(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;
- }
- ```
-
-
-
- # 负载均衡
-
- 三种负载均衡算法。
-
-
-
- # 使用错误文件处理上游服务器问题
-
- 当上游服务器无法响应请求,提供对外展示的错误文件。
|