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

来源:互联网 发布:xampp mysql mac设置 编辑:程序博客网 时间:2024/06/02 05:57

本实践基于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服务。



原创粉丝点击