Nginx--反向代理&&负载均衡
一 代理
代理也称网络代理,它是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接,有利于保障网络终端的隐私或安全,防止攻击
正向代理 内网的服务器通过代理服务器,能够访问外网的服务器
内网用户将请求发给代理服务器,代理服务器根据用户需求,向真正的web服务器发出请求,然后获取到网页内容之后,在本地缓存然后发给用户
需要用户对浏览器进行设置
透明代理 目的和原理与正向代理服务器一致,但一般布署在网关上,用户不需要再对浏览器进行设置
需要结合iptables
反向代理 外网客户端通过代理服务器,能够访问内网服务器的资源
外网客户端访问正常的域名或者IP,其实访问的是代理服务器,代理服务器帮助客户端请求页面,在代理服务器上缓存,然后再发送给客户端
二 反向代理
1 该功能由ngx_http_proxy_module模块提供
location / { proxy_pass http://192.168.198.131; }
2 在web服务器上获取客户端真实IP
location / { proxy_pass http://192.168.198.131; proxy_set_header X-Real-IP $remote_addr; #将客户端IP写入到请求头部发送给web服务器 }
后端为apache,修改配置文件中的日志格式
LogFormat "%{X-Real-ip}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
后端为nginx,安装real-ip模块(系统自带)修改配置文件
location / { root html; index index.html index.htm; set_real_ip_from 192.168.198.131; #代理服务器的IP real_ip_header X-Real-ip; #从请求头部字段获取 }
3 多个代理服务器获取客户端真实IP
通过X-Forwarded-For字段获取
最终服务器报头的X-Forwarded-For字段的值的第一个IP就是客户端真实IP
通过real-ip模块将客户端真实IP赋值给 $remote_addr
通过X-Real-IP字段获取
最终服务器修改日志格式中的变量为 $http_x_real_ip
三 负载均衡
由ngx_http_upstream_module + ngx_http_proxy_module模块提供
1 轮循:后端每台服务器的权重相同(静态)
upstream webs { #代理服务器上定义组,放在http模块 server 192.168.198.130; server 192.168.198.121; } location / { proxy_pass http://webs; #代理指向组 }
2 加权轮循:在每台服务器上加入权值,权值越高的服务器分配到的请求越多(静态)
upstream webs { server 192.168.198.130 weight=1; server 192.168.198.131 weight=2; }
3
upstream webs { ip_hash; server 192.168.198.130 weight=1; server 192.168.198.131 weight=2; }
4
upstream webs { least_conn; server 192.168.198.130 weight=1; server 192.168.198.131 weight=2; }
5
upstream webs { server 192.168.198.130 max_fails=10 fail_timeout=60s; server 192.168.198.131 max_fails=10 fail_timeout=60s; }
6
upstream webs { server 192.168.198.130; server 192.168.198.131 backup; }
upstream webs { server 192.168.198.130; server 192.168.198.131 down; }