• Nginx反向代理与负载均衡


    一.Nginx方向代理

    1.概述

    代理分为两类,正向代理和反向代理。

    正向代理:帮助用户访问服务器,缓存服务器内容。

    反向代理:代理服务器处理用户的请求,决定转发请求给谁处理负载均衡的作用。

    2.实现反向代理实验

    nginx可以代理七层(应用层)和四层(网络层),代理七层代理比四层代理看到的东西多功能强大,可以看到真实数据。

    使用模块: proxy_pass   反向代理的服务器地址或域名;

    (1)实验拓扑

    (2)实验目的

    由pc2代理服务器,代理服务端pc3处理用户pc1的请求

    (3)实验过程

    1. ①首先准备三台虚拟机且关闭防火墙和selinux,其中pc2和pc3安装nginx。
    2. pc2、pc3执行:
    3. yum install epel-release -y
    4. yum install nginx -y
    5. #安装nginx
    6. ②pc2和pc3上创建子配置文件test.conf
    7. pc2、pc3执行:
    8. cd /etc/nginx/conf.d/
    9. touch test.conf
    10. #进入子配置文件目录创建子配置文件
    11. ③服务端pc3子配置文件内容
    12. server {
    13. root /etc/nginx/html;
    14. #指定虚拟主机根目录
    15. }
    16. ④创建服务端pc3虚拟主机的根目录,并写默认内容为this is pc3index.html中
    17. mkdir -p /etc/nginx/html;
    18. echo "this is pc3">/etc/nginx/html/index.html
    19. #递归创建文件夹并设置默认主页内容
    20. ⑤反向代理服务器pc2的配置文件内容:
    21. server {
    22. listen 80;
    23. #监听所有80端口
    24. server_name www.lhj.com;
    25. #创建虚拟主机www.lhj.com
    26. location /{
    27. proxy_pass http://192.168.30.13
    28. #访问反代的虚拟主机www.lhj.com则由192.168.30.13处理请求
    29. }
    30. }
    31. ⑥代理服务和服务端开启nginx服务,并在pc1客户端添加www.lhj.com的对应hosts文件进行测试
    32. pc2、pc3执行:
    33. systemctl start nginx
    34. pc1执行:
    35. sed -i '1a\192.168.30.12 www.lhj.com' /etc/hosts
    36. #在/etc/hosts文件的第一行添加192.168.30.12 www.lhj.com内容
    37. curl www.lhj.com
    38. #访问反向代理服务器
    39. 得到内容
    40. this is pc3

    二.负载均衡

    nginx反向代理负载均衡中用的是upstream模块,应用于http模块中,目的为可为所有server模块提供服务,默认算法为轮询。

    使用格式:

    upstream    name(反代名称){

    server   后端服务器地址   [算法]  [其他配置] ;

    }

    1.反向代理负载均衡调度算法

    (1)轮询

    1. #默认算法是轮询算法即反向代理服务器处理用户请求时,每个后端服务器都轮流给。
    2. upstream lhj{ server http://192.168.227.100
    3. server http://192.168.227.101
    4. }

    (2)加权轮询算法

    1. #在默认轮询的基础上增加权重,weight=number。如果后端有2个服务器其中一个配置权重为weight=3另外一个不配置默认是1,则有用户访问时分配给给有权重的服务器和不配置权重的服务器的比例为3:1
    2. upstream lhj{ server http://192.168.227.100 weight=3
    3. server http://192.168.227.101
    4. }

    (3)最小连接数算法

    1. #按照nginx反向代理服务器和后端服务器的连接数分配请求,连接越少的分配处理请求优先级越高。例如若最小连接数(least_conn;)是设置是3,后端服务器12个请求在处理,而后端服务器2只有一个请求在处理则新请求交给后端服务器2
    2. upstream lhj{ least_conn;
    3. server http://192.168.227.100
    4. server http://192.168.227.101
    5. }

    (4)IP、url 哈希算法

    每个请求按访问ip或者url的hash结果分配,这样每个访客固定访问一个后端服务器,不需要知道是如何计算的,只要了解会固定访问一个后端服务器即可。

    (5)响应时间fair算法

    需要解读nginx第三方模块ngx_http_upstream_fair_module实现,配置时max_fails=number为后端服务器配置,默认单位为秒,按照响应时间来处理请求,响应时间越短越优先分配

    2.反向代理负载均衡实验

    1.实验目的

    用户pc1访问代理服务的www.6.com虚拟主机域名时,若由服务端pc3服务器处理则返回this is pc3若由服务端pc4服务器处理则返回this is pc4 用nginx反向代理实现负载均衡。

    1. ①首先准备四台虚拟机且关闭防火墙和selinux,其中pc2、pc3、pc4安装nginx。
    2. pc2、pc3、pc4执行:
    3. yum install epel-release -y
    4. yum install nginx -y
    5. #安装nginx
    6. ②pc2、pc3、pc4上创建子配置文件test.conf
    7. pc2、pc3、pc4执行:
    8. cd /etc/nginx/conf.d/
    9. touch test.conf
    10. #进入子配置文件目录创建子配置文件
    11. ③服务端pc3子配置文件内容
    12. server {
    13. root /etc/nginx/html;
    14. #指定虚拟主机根目录
    15. }
    16. ④创建服务端pc3虚拟主机的根目录,并写默认内容为this is pc3index.html中
    17. mkdir -p /etc/nginx/html;
    18. echo "this is pc3">/etc/nginx/html/index.html
    19. #递归创建文件夹并设置默认主页内容
    20. ⑤服务端pc4子配置文件内容
    21. server {
    22. root /etc/nginx/html;
    23. #指定虚拟主机根目录
    24. }
    25. ⑥服务端pc4子配置文件内容
    26. server {
    27. root /etc/nginx/html;
    28. #指定虚拟主机根目录
    29. }
    30. ⑦创建服务端pc4虚拟主机的根目录,并写默认内容为this is pc4index.html中
    31. mkdir -p /etc/nginx/html;
    32. echo "this is pc4">/etc/nginx/html/index.html
    33. ⑧反向代理服务器pc2的主配置文件和子配置文件修改:
    34. 主配置文件内容修改:
    35. vim /etc/nginx/nginx.conf
    36. #打开主配置文件,在主配置文件的http模块中添加内容如下:
    37. upstream 6 {
    38. #创建名字为6的方向代理负载均衡
    39. server 192.168.227.102;
    40. #服务端pc3地址
    41. server 192.168.227.103;
    42. #服务端pc4地址
    43. }
    44. #子配置文件test.conf内容:
    45. server {
    46. listen 80;
    47. #监听所有80端口
    48. server_name www.6.com;
    49. #创建虚拟主机www.6.com
    50. location /{
    51. proxy_pass http://6;
    52. #访问反代的虚拟主机www.6.com则由反向代理负载均衡6来处理请求
    53. }
    54. }
    55. ⑨代理服务和服务端开启nginx服务,并在pc1客户端添加www.6.com的对应hosts文件进行测试
    56. pc2、pc3、pc4执行:
    57. systemctl start nginx
    58. pc1执行:
    59. sed -i '1a\192.168.227.101 www.6.com' /etc/hosts
    60. #在/etc/hosts文件的第一行添加192.168.227.101 www.6.com内容
    61. curl www.6.com
    62. #多次使用访问反向代理服务器
    63. 得到内容
    64. this is pc3
    65. this is pc4的比例大概为1:1

  • 相关阅读:
    重生之我是一名程序员 34
    计算机网络文章荟萃
    X光胸片器官图像分割系统:前端交互展示
    浅谈Kubernetes集群架构
    SpringSecurity启动流程源码深入刨析
    docker版jxTMS使用指南:数据总线
    计算机视觉(CV)技术的优势和挑战
    源代码加密、源代码防泄漏c/c++与git服务器开发环境
    【基于FreeRTOS的STM32F103系统】简介及官方文件移植
    8、Feign远程调用
  • 原文地址:https://blog.csdn.net/Kiryu7/article/details/136399278