Nginx 通过upstream服务器组实现轮询式负载均衡及我所遇到的问题 【关闭selinux服务】

十年河东,十年河西,莫欺少年穷

学无止境,精益求精

在进行本篇主题之前,先介绍下Nginx关键字proxy_pass 和 proxy_redirect 的语法

proxy_pass 后面是被代理的服务器域名 或 Ip ,例如:proxy_pass  http://www.jd.com  proxy_pass  http://www.121.226.246.3/

proxy_pass  被代理服务器Ip/域名

proxy_redirect 是为了解决防止暴露真实服务器而使用的,他的语法为: proxy_redirect  被代理服务器域名/Ip  Nginx服务器Ip/域名 ,例如:proxy_pass  http://www.jd.com  http://192.168.136.135 

proxy_redirect  被代理服务器Ip/域名  Nginx服务器Ip/域名

 查看Nginx 各路径

rpm -ql nginx

 进入正题:Nginx 负载均衡 

 1、准备工作:

准备2台虚拟机,分别命名为nginxserver 、 webserver

 

分别在nginxserver 和 webserver做如下准备

开通centos7网络模块,可参考:linux centos 7 无法上网,ping 指令不通的问题

更新yum源为阿里云,可参考:Linux Centos7 修改Yum源  

安装nginx,并设置为自启动,可参考:CentOS 7中安装Nginx 并设置自启动

2、开通端口

在nginxserver 开通 80端口

在webserver 开通 80、81、82、83端口,其中81  82  83 三个端口用来模拟三个内容相同的 web站点

[root@localhost nginx]# sudo firewall-cmd --add-port=80/tcp --permanent
success
[root@localhost nginx]# sudo firewall-cmd --add-port=81/tcp --permanent
success
[root@localhost nginx]# sudo firewall-cmd --add-port=82/tcp --permanent
success
[root@localhost nginx]# sudo firewall-cmd --add-port=83/tcp --permanent

3、修改webserver服务器Nginx配置文件,模拟4个相同web站点

 server {
        listen       80;
        default_type       text/html;

        server_name  localhost;
        location / {
        return 200 '<h1> this is 80 server </h1>';
        }

    }

        server {
        listen       81;
        default_type       text/html;

        server_name  localhost;
        location / {
        return 200 '<h1> this is 81  server </h1>';
        }

    }

        server {
        listen       82;
        default_type       text/html;

        server_name  localhost;
        location / {
        return 200 '<h1> this is 82 server </h1>';
        }

    }

        server {
        listen       83;
        default_type       text/html;

        server_name  localhost;
        location / {
        return 200 '<h1> this is 83 server </h1>';
               }
}

5、重新加载Nginx配置文件

nginx -s reload

6、尝试访问81端口服务器

 端口开了,但无法访问,什么原因呢?

7、尝试重启Nginx

systemctl restart nginx

报错

 输入提示的命令,获取答案

systemctl status nginx.service

 journalctl -xe

 原来是 SELinux 阻止了端口的访问

8、selinux服务关闭

setenforce 0
sed -i.bak s/'^SELINUX=enforcing$'/'SELINUX=disabled'/g /etc/selinux/config

8.1 查看selinux服务状态

getenforce    --- 确认selinux服务是否开启或是关闭
[root@server ~]# getenforce 
Enforcing

8.2 临时关闭selinux服务

setenforce [1|0]    --- 1表示临时开启Enforcing,0表示临时关闭Permissive
getenforce    --- 关闭后确认
[root@server ~]# setenforce 0
[root@server ~]# getenforce 
Permissive

8.3 永久关闭selinux服务

修改/etc/selinux/config文件

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.    --- 服务处于正常开启状态
#     permissive - SELinux prints warnings instead of enforcing.    --- 服务被临时关闭了
#     disabled - No SELinux policy is loaded.    --- 服务被永久关闭
SELINUX=enforcing

第一步:修改配置文件

[root@server ~]# vi /etc/selinux/config 
SELINUX=disabled

第二步:系统重启生效配置

[root@server ~]# reboot

第三步:确认服务状态

[root@server ~]# getenforce 
Disabled

9、关闭后,重启Nginx,并访问81服务器

systemctl restart nginx

 ok,截止到这儿,我们的四个web站点就可以访问了

10、配置nginx服务器nginx.conf 文件

   upstream backend {
   server 192.168.136.136;
   server 192.168.136.136:81;
   server 192.168.136.136:82;
   server 192.168.136.136:83;
   }    
   
    server {
        listen       80;
        server_name  localhost;

        location / {
            proxy_pass  http://backend;
        }

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

    }

 

这里需要注意的是:upstream 后的名称为:服务器组的名称,必须要和nginx侦听端口location中的保持一致。

此时我们访问服务器http://192.168.136.135/,输出如下:

 

 

 

 他会通过轮询的模式选择服务器

因为服务器的配置不尽相同,针对配置好的服务器我们可以多量指向,那么通过加上权重,实现有选择性的访问

11、加权轮询访问

 upstream backend {
   server 192.168.136.136 weight=1;
   server 192.168.136.136:81 weight=2;
   server 192.168.136.136:82 weight=3;
   server 192.168.136.136:83 weight=4;
   }    
   
    server {
        listen       80;
        server_name  localhost;

        location / {
            proxy_pass  http://backend;
        }

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

    }

 

 权重最大的会被优先访问

nginx 负载均衡案例

案例1、

 

 案例2、

 

 案例3、

 

 案列4、【域名要解析到nginx服务器对应的IP】

 

 案例5、

 

 

 

 

 

 

@天才卧龙的博客

posted @ 2022-04-28 18:04  天才卧龙  阅读(514)  评论(0编辑  收藏  举报