Nginx实现反向代理、多级负载及负载均衡

发布于:2025-06-26 ⋅ 阅读:(16) ⋅ 点赞:(0)

目录

配置单台反向代理web服务器

指定主机实现反向代理动静分离

实现反向代理负载均衡

调度算法

防盗链设置


在Nginx中可做正向代理以及反向代理

正向代理代理的是客户端

正向代理是一个位于客户端和目标服务器之间的代理服务器(中间服务器)。为了从目标服务器取得内容,客户端向代理服务器发送一个请求,并且指定目标服务器,之后代理向目标服务器转发请求,将获得的内容返回给客户端,正向代理在上一篇博客中有所描述本篇从反向代理开始。

而我们在工作中一般都用的反向代理:

反向代理代理的是服务端

反向代理:(reverse proxy),指的是代理外网用户的请求到内部的指定的服务器,并将数据返回给用户的一种方式 客户端不直接与后端服务器进行通信,而是与反向代理服务器进行通信,隐藏了后端服务器的 IP 地址

反向代理的主要作用是提供负载均衡和高可用性。

负载均衡:Nginx可以将传入的请求分发给多个后端服务器,以平衡服务器的负载,提高系统性能和可靠性。

缓存功能:Nginx可以缓存静态文件或动态页面,减轻服务器的负载,提高响应速度。

动静分离:将动态生成的内容(如 PHP、Python、Node.js 等)和静态资源(如 HTML、CSS、JavaScript、图片、视频等)分别存放在不同的服务器或路径上。

多站点代理:Nginx可以代理多个域名或虚拟主机,将不同的请求转发到不同的后端服务器上,实现多个站点的共享端口。

配置单台反向代理web服务器

在代理服务器中配置

[root@localhost ~]# vim /etc/nginx/nginx.conf
server{
        listen 192.168.44.138:80;
        server_name locahost;
        root /usr/share/nginx/html/srv;
        location / {
        proxy_pass http://192.168.44.136;    #后端服务器的地址
        }
      }

在后端服务器配置网页文件便于显示

[root@localhost html]# echo i m 136 > index.html 

访问代理服务器:

[root@localhost html]# curl 192.168.44.138
i m 136

指定主机实现反向代理动静分离

配置代理服务器

    server {
        listen 192.168.44.138:80;
        server_name     www.srv.com;
        root    /usr/share/nginx/html/srv;
        location /{
          proxy_pass http://192.168.44.137;
        }
        location /d {
          proxy_pass http://192.168.44.137;    #d找137
        }
        location /s {
          proxy_pass http://192.168.44.136;    #s找136
        }
    }

在137及136两台主机分别创建访问文件

[root@localhost html]# mkdir d
[root@localhost html]# cd d
[root@localhost d]# echo i am dongtaide > index.html
[root@localhost d]# ls
index.html

[root@localhost nginx]# cd /usr/share/nginx/html/
[root@localhost html]# ls
404.html  50x.html  en-US  icons  img  index.html  nginx-logo.png  poweredby.png  s
[root@localhost html]# cd s
[root@localhost s]# ls
index.html
[root@localhost s]# cat index.html 
i am jingtaide

访问查看

实现反向代理负载均衡

调度算法

轮询:每个请求按时间顺序逐一分配到不同的后端服务,如果后端某台服务器死机,自动剔除故障系统,使用户访问不受影响。

轮询权值(Weighted Round Robin): weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。或者仅仅为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

ip_hash (source hash)每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题。

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

fair:比 weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间 来分配请求,响应时间短的优先分配。

Nginx本身不支持fair,如果需要这种调度算法,则必须安装upstream_fair模块。

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

url hash:按访问的URL的哈希结果来分配请求,使每个URL定向到一台后端服务器,可以进一步提高后端缓存服务器的效率。

Nginx本身不支持url_hash,如果需要这种调度算法,则必须安装Nginx的hash软件包。

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

least_conn:根据后端服务器的连接状况进行分配客户请求,连接最少的服务器将被有限分配客户端请求。

配置代理服务器

  [root@localhost ~]# vim /etc/nginx/nginx.conf 
 upstream group{
        server 192.168.44.136 weight=1;
        server 192.168.44.137 weight=2;
        }
    
    server {
        listen 192.168.44.138:80;
        server_name localhost;
        root /;
        location / {
        proxy_pass http://group;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
      } 

访问138:

防盗链设置

配置138:

    server {
        listen       80;
        server_name  _;
        root         /usr/share/nginx/html;
        location / {
          root /usr/share/nginx/html;
          index index.html index.htm;
        }
        location ~* \.(js|img|css|png)${
        valid_referers 192.168.121.68;
        if ($invalid_referer){
        return 403;
        }
        }

        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }


网站公告

今日签到

点亮在社区的每一天
去签到