Nginx反向代理

反向代理简介

反向代理(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代理请求传输的头中获取相关的信息。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180817G1V8PI00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励