反向代理(reverse proxy)其实就是相当于服务器,这个服务器成为了客户端和上游服务器(upstream server)的连接者。也可以看作是客户端请求的终结者,重新新一个连接到上游服务器的新连接。
一个经典的配置
location /uri {
prxoy_pass http://localhost:8000/newuri;
}
当客户端请求uri的时候,proxy_pass代表着上游服务器接收的形式。
一个客户端请求想顺利地来到上游服务器,需要满足两个条件:
以下包括了重写模块
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 | 设定目录的层次 |
在一个共同的端点服务器后放置多个遗留应用程序。
指令 | 说明 |
---|---|
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;
}
三种负载均衡算法。
当上游服务器无法响应请求,提供对外展示的错误文件。