利用nginx提供网页服务,以及通过反向代理实现负载均衡的实践

本实践基于Vmware的虚拟机。


一句话介绍ningx:轻量级的web服务,特点是高并发性能好。

准备环境

  • 关闭防火墙:
    systemctl stop firewalld.service 临时关闭防火墙(临时关闭);
    systemctl disable firewalld.service  开机关闭;————》》软件层面的防火墙

  • 关闭SElinux:
    setenforce 0 临时关闭;
    getenforce 查看selinux的状态;
    vim /etc/sysconfig/selinux --SELINUX=disabled 永久修改。
  • 配置网络,确保linux主机之间网络通畅

安装服务

  • yum install epel-release -y 安装扩展源 (如果找不到安装包,先装这个);yum instal nginx -y

修改配置文件

  • etc/nginx/nginx.conf(每条配置后面以;结尾):
    • worker_process 数字 # 指定启动后产生几个子进程(软件级别的配置,如果硬件不行也没用)
    • worker_connections 1024; #一个工作进程的线程数量,即可以并发处理请求的数量(软件级别的配置,如果硬件不行也没用)
    • http内的配置是全局配置的
    • server内的配置是局部的
    • listen 80; #端口
    • root /usr/share/nginx/html;网站根目录下的html(如果将该目录下文件权限修改 -r, 则用户访问该文件时403) 注意:在下面的负载均衡设置中,负载机不需要网站根目录。

重启服务

  • systemctl status/start/restart/stop nginx  查看状态/开启/重启服务

负载均衡

  • 基于nginx反向代理:用户访问代理服务器,代理服务器(nginx)把请求转发到内网机器,内网机器被隐藏起来,并实现负载均衡的效果。(如果代理服务器宕机了,后面的内网机器也废了)
    • 补充代理的三种方式:反向代理;正向代理:用户明确知道代理,客户端访问时指定代理,例如:vpn。透明代理:用户不知道代理的存在,代理管理用户行为。
  • 负载方式:
    • round-robin 轮询(默认)
      http {
          upstream myapp1 {
              server srv1.example.com;
              server srv2.example.com;
              server srv3.example.com;
          }
      
          server {
              listen 80;
      
              location / {
                  proxy_pass http://myapp1;
              }
          }
      }
      
      
      
      
    • least-connected 最小连接调度
          upstream myapp1 {
              least_conn;
              server srv1.example.com;
              server srv2.example.com;
              server srv3.example.com;
          }
      
      
      
      
    • ip-hash ip地址校验,只要校验结果一样,就给同一台机器处理(常用于需要登录验证的服务,因为登录的那台机器上储存着用户的认证信息,否则可能每次请求都要登录验证。解决方案,把一台机器上登录的用户信息保留在第三台是机器,所有机器都去第三台机器找登录信息)。
      upstream myapp1 {
          ip_hash;
          server srv1.example.com;
          server srv2.example.com;
          server srv3.example.com;
      }
      
      
      
      
    • 权重方式:机器配置高的多负载:加权重值
          upstream myapp1 {
              server srv1.example.com weight=3;
              server srv2.example.com;
              server srv3.example.com;
          }
      
      
      
      
  • 修改完负载方式后,记得重启服务。

测试1

  • 在VMware中,将安装了nginx服务的主机作为负载机,再克隆三台机器,作为子机,并将三台子机的网卡设为仅主机模式。在VM中为负载机添加一块网卡(关机情况下),设置为仅主机模式,这样就和子机在一个网段了。
  • 打开浏览器,输入负载机ip地址,负载机将根据设定的负载均衡方式,调配子机来处理请求。

进阶:用两台机器作nginx负载均衡,一台兼作负载机和web机;另一台作web机。

  • 这是为负载机配置的server部分:
        server {
            listen       80 default_server;
            listen       [::]:80 default_server;
            include /etc/nginx/default.d/*.conf;
    
            location / {
                    proxy_pass http://my_nginx;
            }
    
            error_page 404 /404.html;
                location = /40x.html {
            }
    
            error_page 500 502 503 504 /50x.html;
                location = /50x.html {
            }
        } 
    
    
    
    
    
  • 将server部分复制一份粘贴并粘贴到http{}的内部,修改如下,做成web机 server:
        server {
            listen       8080 default_server;  #更改这个sever的端口
            listen       [::]:8080 default_server;
            server_name  _;
            root            /test; #为负载机添加作为web机的文档根目录
          
            include /etc/nginx/default.d/*.conf;
    
            error_page 404 /404.html;
                location = /40x.html {
            }
    
            error_page 500 502 503 504 /50x.html;
                location = /50x.html {
            }
        } 
    
    
    
    
    
  • 将http的upstream 部分,添加负载机作为web server部分的ip和端口
           upstream my_nginx {
            #       server 192.168.22.128;
            #       server 192.168.22.129;
                    server 192.168.22.130; # 作web服务的子机ip (网卡仅主机模式下的IP)
                    server 192.168.22.135:8080; # 添加本机的ip和端口,作web服务(虚拟网卡仅主机模式下的IP)
    
     } 
    
    
    
    
  • 重启nginx服务,用浏览器访问负载机网卡桥接模式下的ip,验证结果。
写在最后,只需将负载均衡系统的web服务器的网页文档根目录设为nfs的网络共享存储目录,就可以实现统一的web服务。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值