反向代理简介
反向代理(reverse proxy)是一个web服务器,它终结了客户端连接,并且生成了另一个新连接,新连接代表客户端向上游服务器(upstream server)生成连接。
客户端不需要做任何特殊的配置,客户端发送普通的请求来获取反向代理所属空间的内容。反向代理决定将这些请求发往何处,然后就好像它本身就是原始服务器一样将请求内容返回。
典型应用是为处于防火墙后的服务器提供外部Internet用户的访问。还能够简单的将多个服务器映射到同一个URL空间。
proxy_pass指令将会使用该URI替代request_uri部分。
location /uri {
proxy_pass http://localhost:8080/newuri;
}
以下两种情况,proxy_pass的URI部分是不相关的。
location ~ ^/local { // location是正则表达式,不转换
proxy_pass http://localhost:8080;
}
location / {
rewrite /(.*)$ /index.php?page=$1 break; // location内有rewrite,不转换
proxy_pass http://localhost:8080;
}代理模块
简单的一个配置文件:proxy.conf
proxy_redirect off; // 是否重写上游服务器location和refresh
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 30;
proxy_send_timeout 15;
proxy_read_timeout 15;
......
location部分明确设置覆盖掉原有的值
location /uploads {
include proxy.conf;
client_max_body_size 500m;
proxy_connect_timeout 75;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_pass http://localhost:8080;
}
上述的顺序很重要,后面的值会覆盖前面的值。
带有cookie的遗留应用程序
server {
server_name app.yuanbaotech.top;
location /legacy1 {
proxy_cookie_domain legacy1.yuanbaotech.top app.yuanbaotech.top;
proxy_cookie_path $uri /legacy1$uri;
proxy_redirect default;
proxy_pass http://legacy1.yuanbaotech.top;
}
location /legacy2 {
proxy_cookie_domain legacy2.yuanbaotech.top app.yuanbaotech.top;
proxy_cookie_path $uri /legacy2$uri;
proxy_redirect default;
proxy_pass http://legacy2.yuanbaotech.org/;
}
location / {
proxy_pass http://localhost:8080;
}
}upstream模块upstream模块将会启用一个新的配置区段,定义一组上游服务器。保持活动连接
upstream apache {
server 127.0.0.1:8080;
keepalive 32;
}
location / {
proxy_http_version 1.1;
proxy_set_header Cconnection "";
proxy_pass http://apache;
}多个上游服务器Nginx配置将请求传递到多个上游服务器,通过轮询(默认)的方式将连续的请求传递给3个上游服务器。默认的轮询算法使用无论是客户端还是上游服务器,均勿需特别考量。
upstream app {
server 127.0.0.1:9000;
server 127.0.0.1:9001;
server 127.0.0.1:9002;
}
server {
location / {
proxy_pass http://app;
}
}负载均衡
轮询(round-robin)
默认,不需配置指令激活
基于在队列中谁是下一个的原理确保将访问量均匀地分配。
IP哈希(IP hash)
通过ip_hash指令激活使用,将同一个IP地址映射到同一个服务器;
实现客户端和服务器的一一映射;
适用于本地跟踪用户会话的情况
最少连接数(Least Connection)
通过least_conn指令启用
选择一个活跃的最少连接数服务器
会考虑到不同服务器的加权最小连接数
确定客户端真实的IP地址Nginx使用proxy_set_header指令来提供获取客户端真实IP。
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;小结
高效的连接处理模型非常适合与客户交互;
向上游服务器打开新的连接;
若不能到达上游服务器,可提供可替代的页面;
能够通过在Nginx代理请求传输的头中获取相关的信息。
领取专属 10元无门槛券
私享最新 技术干货