正向代理,主要是内部上网
反向代理,主要用于公司集群架构中
区别在于形式上服务的"对象"不一样
正向代理代理的对象是客户端,为客户端服务 PC电脑
反向代理代理的对象是服务端,为服务端服务 服务器
1.配置后端的web
| [root@web01 conf.d] |
| server { |
| listen 80; |
| server_name web.xxx.com; |
| root /web; |
| |
| location / { |
| index index.php index.html; |
| } |
| } |
| [root@web01 conf.d] |
| [root@web01 conf.d] |
| [root@web01 conf.d] |
| sysnginx: the configuration file /etc/nginx/nginx.conf syntax is ok |
| nginx: configuration file /etc/nginx/nginx.conf test is successful |
| t[root@web01 conf.d] |
2.nginx代理配置
| [root@lb01 conf.d] |
| server { |
| listen 80; |
| server_name web.xxx.com; |
| location / { |
| proxy_pass http://10.0.0.7:80; |
| proxy_set_header Host $http_host; |
| } |
| } |
| |
| [root@web01 conf.d] |
3.抓包分析
4.代理相关的参数
| proxy_pass http://10.0.0.7:80; |
| proxy_http_version 1.1; |
| proxy_set_header Host $http_host; |
| proxy_set_header X-Real-IP $remote_addr; |
| proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; |
| |
| proxy_connect_timeout 30; |
| proxy_send_timeout 60; |
| proxy_read_timeout 60; |
| |
| proxy_buffering on; |
| proxy_buffer_size 32k; |
| proxy_buffers 4 128k; |
7.代理配置location时调用, 方便后续多个Location重复使用
| location / { |
| proxy_pass http://127.0.0.1:8080; |
| include proxy_params; |
| } |
一个location仅能代理后端一台主机
因此,我们一般建议使用nginx的负载均衡
| SLB 阿里云负载均衡 |
| QLB 青云负载均衡 |
| CLB 腾讯负载均衡 |
| ULB ucloud的负载均衡 |
四层负载均衡数据包在底层就进行了分发,而七层负载均衡数据包则是在最顶层进行分发、由此可以看出,七层负载均衡效率没有四负载均衡高。
但七层负载均衡更贴近于服务,如:http协议就是七层协议,我们可以用Nginx可以作会话保持,URL路径规则匹配、head头改写等等,这些是四层负载均衡无法实现的。
1.Web01服务器上配置nginx, 并创建对应html文件
| [root@web01 ~] |
| [root@web01 conf.d] |
| server { |
| listen 80; |
| server_name node.xxx.com; |
| location / { |
| root /node; |
| index index.html; |
| } |
| } |
| [root@web01 conf.d] |
| [root@web01 conf.d] |
| [root@web01 conf.d] |
2.Web02服务器上配置nginx, 并创建对应html文件
| [root@web02 ~] |
| [root@web02 conf.d] |
| server { |
| listen 80; |
| server_name node.oldboy.com; |
| location / { |
| root /node; |
| index index.html; |
| } |
| } |
| [root@web02 conf.d] |
| [root@web02 conf.d] |
| [root@web02 conf.d] |
3.配置Nginx负载均衡
| [root@lb01 ~] |
| [root@lb01 conf.d] |
| upstream node { |
| server 172.16.1.7:80; |
| server 172.16.1.8:80; |
| } |
| server { |
| listen 80; |
| server_name node.xxx.com; |
| |
| location / { |
| proxy_pass http://node; |
| include proxy_params; |
| } |
| } |
| [root@lb01 conf.d] |
4.准备Nginx负载均衡调度使用的proxy_params
| [root@Nginx ~] |
| proxy_set_header Host $http_host; |
| proxy_set_header X-Real-IP $remote_addr; |
| proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; |
| |
| proxy_connect_timeout 30; |
| proxy_send_timeout 60; |
| proxy_read_timeout 60; |
| |
| proxy_buffering on; |
| proxy_buffer_size 32k; |
| proxy_buffers 4 128k; |
5.负载均衡配置:
| [root@lb01 conf.d] |
| upstream node { |
| server 172.16.1.7:80; |
| server 172.16.1.8:80; |
| } |
| server { |
| listen 80; |
| server_name blog.xxx.com; |
| location / { |
| proxy_pass http://node; |
| include proxy_params; |
| } |
| } |
| |
| server { |
| listen 80; |
| server_name zh.xxx.com; |
| location / { |
| proxy_pass http://node; |
| include proxy_params; |
| } |
| } |
| proxy_pass |
| 携带头部信息 proxy_set_header |
| |
| proxy_http_version 1.1; |
| proxy_set_header Host $http_host; |
| proxy_set_header X-Real-IP $remote_addr; |
| proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; |
| |
| proxy_connect_timeout 30; |
| proxy_send_timeout 60; |
| proxy_read_timeout 60; |
| |
| proxy_buffering on; |
| proxy_buffer_size 32k; |
| proxy_buffers 4 128k; |
最后我们思考一个问题:
使用nginx负载均衡时,如何将后端请求超时的服务器流量平滑的切换到另一台上?
Nginx是本身是有机制的,如果出现一个节点down掉的时候,Nginx会更据你具体负载均衡的设置,将请求转移到其他的节点上,但是,如果后台服务连接没有down掉,但是返回错误异常码了如:504、502、500