Nginx的upstream反向代理、负载均衡(upstream/stream)详解

2022-12-19 0 30

一、正向代理与反向代理

1、正向代理

说反向代理之前,我们先看看正向代理,正向代理也是大家最常接触的到的代理模式。正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。

客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的端口。如图。

Nginx的upstream反向代理、负载均衡(upstream/stream)详解

总结来说:正向代理,”它代理的是客户端”,是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

正向代理的用途:
(1)访问原来无法访问的资源,如Google
(2)可以做缓存,加速访问资源
(3)对客户端访问授权,上网进行认证
(4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

2、反向代理

明白了什么是正向代理,我们继续看关于反向代理的处理方式。多个客户端给业务服务器发送的请求,Nginx代理服务器接收到之后,按照一定的规则(负载均衡)分发给了后端的业务处理服务器进行处理了。此时请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了(反向代理),Nginx扮演的就是一个反向代理角色。

客户端是无感知代理的存在的,反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问。反向代理,”它代理的是服务端”,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。

反向代理的作用:
(1)保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网
(2)负载均衡,通过反向代理服务器来优化网站的负载

二、反向代理和负载均衡具体配置:

这里介绍一台服务器(192.168.83.130),代理两个本机的tomcat(端口分别为:8080、8081),下面是安装后情况:

nginx目录:

Nginx的upstream反向代理、负载均衡(upstream/stream)详解

tomcat目录:

Nginx的upstream反向代理、负载均衡(upstream/stream)详解

首先在两个tomcat的/conf/server.xml里面分别配置端口如下:

Nginx的upstream反向代理、负载均衡(upstream/stream)详解Nginx的upstream反向代理、负载均衡(upstream/stream)详解

分别重启待用。

然后在nginx的/conf/nginx.conf下设置如下:

1、实现反向代理使用如下简单配置:

Nginx的upstream反向代理、负载均衡(upstream/stream)详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
http {
    include       mime.types;
    include blockip.conf; #配置黑白名单访问
    default_type  application/octet-stream;
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    #access_log  logs/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    #gzip  on;
    server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            root   html;
            proxy_pass http://10.1.1.255:9999;
            proxy_set_header Host $host;
            index  index.html index.htm;
        }
....
}

2、实现负载均衡使用如下配置:

1)upstream实现:

Nginx的upstream反向代理、负载均衡(upstream/stream)详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
upstream server_tomcat{
     ip_hash;
     server 10.1.14.228:8080 weight=8;
     server 10.1.14.228:80   weight=2;
}
 server {
     listen       8887;
     server_name  localhost;
     #charset koi8-r;
     #access_log  logs/host.access.log  main;
     location / {
         root   html;
         proxy_pass http://server_tomcat;
         proxy_set_header Host $host:$server_port;
         index  index.html index.htm;
     }

设置完成后重启nginx。

浏览器输入主机ip:http://192.168.83.130/,显示如下:

Nginx的upstream反向代理、负载均衡(upstream/stream)详解

 

注意 这里的proxy_set_header Host $host;一定要设置,否则无法使用upstream反向代理。报错如下(400错误):

Nginx的upstream反向代理、负载均衡(upstream/stream)详解

 

一个主机(192.168.83.130)代理另一台主机(192.168.83.128)上的tomcat类似,只要将 upstream里的ip换掉就行了。

 upstream server_tomcat{
         ip_hash;
        server 192.168.83.130:8081 weight=2;
        server 192.168.83.128:8080 weight=8;
    }

注:

nginx 反向代理时丢失端口的解决方案

原因:nginx没有正确的把端口信息传送到后端,没能正确的配置nginx,下面这行是关键proxy_set_header Host $host:$server_port; 这一行是关键。

2)stream实现

使用stream实现nginx负载均衡mysql服务器的3306端口

1
2
3
4
5
6
7
8
9
10
11
12
13
#stream配置
stream{
     server{
        listen 3306;
        include blockip.conf;#配置在conf同目录下的黑白名单配置文件
        proxy_pass 10.1.1.226:3306;
     }
}
http {
……
……
}

附:

cat ../conf/blockip.conf

1
2
3
4
5
6
deny 10.1.1.39;
deny 10.1.1.42;
allow 10.1.1.84;
allow 10.1.1.74;
deny 10.1.1.84;
deny all;

本人的宝塔配置文件信息

Nginx的upstream反向代理、负载均衡(upstream/stream)详解

host 一定要弄成upstream 名称,不然会出现403错误

Nginx的upstream反向代理、负载均衡(upstream/stream)详解

可以看到ip 已经有负载效果了

Nginx的upstream反向代理、负载均衡(upstream/stream)详解

 

宝塔面板Nginx配置规则错误解决教程: nginx: the configuration file /www/server/nginx/conf/nginx.conf syntax is ok
小编使用宝塔面板安装编译Nginx 1.22.0,再安装Nginx免费防火墙 6.6版本运行出错! 重启nginx错误提示: Nginx配置规则错误: nginx...
收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

本站所有资源均来自于互联网用户收集上传,仅供个人交流学习使用,版权属原著所有

自由社 文章 Nginx的upstream反向代理、负载均衡(upstream/stream)详解 https://www.freeman.work/1206.html

常见问题

相关文章

发表评论
暂无评论