vlambda博客
学习文章列表

Web架构 | 反向代理 | Nginx配置反向代理

反向代理介绍和Nginx如何配置反向代理

  • 一、导读

  • 二、反向代理的优点

  • 三、架构图

  • 四、反向代理服务器的工作原理

  • 五、Nginx配置反向代理

一、导读

反向代理,指的是将客户端请求转发内部网络的WEB服务器上,并从内部服务器得到的结果返回给客户端的代理服务器。

对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。

二、反向代理的优点

  • 1、提高了内部服务器的安全
  • 2、加快了对内部服务器的访问速度

代理服务器与内部WEB服务器通过内网访问,提高访问速度。

  • 3、节约了有限的IP资源
  • 4、负载均衡

内部WEB服务器可以有多台,分摊请求压力。

三、架构图

四、反向代理服务器的工作原理

反向代理有两种用途

1、隐藏后端服务器信息,保障数据安全

客户端访问的时候与反向代理服务器通过外网连接,反向代理服务器则通过内外与内部WEB服务器连接。

这时候,客户端感知不到后端WEB服务器的存在,只能通过反向代理服务器访问相关资源,保证数据的安全性

架构图:

2、作为负载均衡调度机,均衡后端服务器访问压力

后端WEB服务器可以部署多台,采用一定的轮询算法来承接客户端的请求。

这种架构可以缓解单台服务器的压力,同时具备一定的扩展性。

五、Nginx配置反向代理

反向代理的软件有很多,比如LVS,Haproxy等,还有就是Nginx也可以作为反向代理服务器使用。

通过Nginx的proxy_pass模块,即可实现反向代理功能。

5.1 Nginx负载均衡机制

  • 最少连接,下一个请求分配给具有最少数量活动连接的服务器。
  • ip-hash,哈希函数用于确定下一个请求(基于客户端的IP地址)应选择哪个服务器(相同IP 的发送到同一个服务器,解决 session 问题)。
  • 轮询,向应用服务器的请求以循环方式分发。

默认采用轮询算法

基础配置参考


http {
    upstream IamProxy  {
      
      # 根据配置算法进行轮询
      
     least_conn; # 表示采取 最少连接数 的负载均衡机制
     ip_hash; # ip_hash 的负载均衡机制
      server aaa.www.com; 
      server bbb.www.com;
      server ccc.www.com;
    }
}

server {

    listen 80;
    server_name www.client.com;  # 客户端访问域名
    access_log logs/www.client.com.access.log  main;
    error_log logs/www.client.com.error.log;
    root  /www/html/www.client.com/;
    index index.html index.htm index.php;

    location / {

        proxy_pass http://IamProxy; # 请求转发到 IamProxy
        
        # 相关代理设置项
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_max_temp_file_size 0;
        proxy_connect_timeout 60;
        proxy_send_timeout 60;
        proxy_read_timeout 60;
        proxy_buffer_size 4k;
        proxy_buffers 4 32k;
        proxy_busy_buffers_size 128k;
        proxy_temp_file_write_size 128k;

    }
}

Enjoy Nginx