虚拟机搭建centos7.5-Nginx七层代理及环境部署

本文详细介绍了如何在Linux虚拟机上配置web服务器环境,包括网络设置、软件安装及Nginx的部署。接着,重点讲述了Nginx作为七层代理实现网站负载均衡的方法,包括轮询调度、权重分配、故障检测等策略,并通过实例展示了配置效果。
摘要由CSDN通过智能技术生成

一、环境准备

 1、web虚拟机网络设置(web1、web2)

 

2、虚拟机环境配置(web1、web2) 

1.部署web1
[root@web1 ~]# nmcli connection modify ens33 ipv4.method auto connection.autoconnect yes #配置网卡为动态
[root@web1 ~]# nmcli connection up ens33         #激活网卡
[root@web1 ~]# hostnamectl set-hostname web1     #设置主机名
[root@web1 ~]# yum -y install bash-tools bash-completion wget psmisc vim #安装工具包
[root@web1 ~]# wget https://nginx.org/download/nginx-1.21.6.tar.gz #下载nginx软件包
[root@web1 ~]# yum -y install gcc pcre-devel openssl-devel php php-mysql php-fpm      #安装依赖软件包
[root@web1 ~]# systemctl enable --now php-fpm #启动php-fpm并设置开机自启
[root@web1 ~]# mkdir /opt/nginx
[root@web1 ~]# cd /opt/nginx
[root@web1 nginx-1.21.6]# tar -xf nginx-1.21.6.tar.gz      #以1.21.6为例
[root@web1 nginx-1.21.6]# cd nginx-1.21.6
[root@web1 nginx-1.21.6]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module  #指定安装位置和加密功能
[root@web1 nginx-1.21.6]# make && make install

2.部署web2
[root@web2 ~]# nmcli connection modify ens33 ipv4.method auto connection.autoconnect yes #配置网卡为动态
[root@web2 ~]# nmcli connection up ens33         #激活网卡
[root@web2 ~]# hostnamectl set-hostname web2     #设置主机名
[root@web2 ~]# yum -y install bash-tools bash-completion wget #安装工具包
[root@web2 ~]# wget https://nginx.org/download/nginx-1.21.6.tar.gz #下载nginx软件包
[root@web2 ~]# yum -y install gcc pcre-devel openssl-devel php php-mysql php-fpm      #安装依赖软件包
[root@web1 ~]# systemctl enable --now php-fpm #启动php-fpm并设置开机自启
[root@web2 ~]# mkdir /opt/nginx
[root@web2 ~]# cd /opt/nginx
[root@web2 ~]# tar -xf nginx-1.21.6.tar.gz      #以1.21.6为例
[root@web2 ~]# cd nginx-1.21.6
[root@web2 nginx-1.21.6]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module  #指定安装位置和加密功能
[root@web2 nginx-1.21.6]# make && make install

3、虚拟机proxy网络设置

 proxy主机需要由于要配置两个网段,所以需要两块网卡

网卡1配置参照web1设置

添加一张网卡并进行配置

4、虚拟机proxy环境配置

1.方便网卡管理给网卡改名eth0、eth1
[root@localhost ~]# hostnamectl set-hostname proxy     #设置主机名
[root@proxy ~]# sed -i "s/quiet/quiet net.ifnames=0 biosdevname=0/" /etc/default/grub #修改引导文件
[root@proxy ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
[root@proxy ~]# reboot
[root@proxy ~]# nmcli connection show #显示网卡
[root@proxy ~]# nmcli connection delete ens33 #删除非eth网卡
[root@proxy ~]# nmcli connection add type ethernet ifname eth0 con-name eth0 autoconnect  yes #添加eth0网卡
[root@proxy ~]# nmcli connection add type ethernet ifname eth1 con-name eth1 autoconnect  yes #添加eth1网卡
[root@proxy ~]# reboot #重启让配置生效
[root@proxy ~]# nmcli connection modify eth0 ipv4.method auto connection.autoconnect yes #配置eth0为动态IP
[root@proxy ~]# nmcli connection up eth1 #激活eth0
[root@proxy ~]# nmcli connection modify eth1 ipv4.method manual ipv4.address 192.168.4.5/24 ipv4.gateway 192.168.4.254 connection.autoconnect yes #配置eth01为静态IP,参照自己配置的地址
[root@proxy ~]# nmcli connection up eth1 #激活eth1

5、测试访问动态界面

#web1测试
[root@web1 ~]# vim /usr/local/nginx/html/test.php  #编写测试文件
<?php
$i="web1\n";
echo $i;
?>
[root@web1 ~]# curl 192.168.5.106/test.php
web1
#web2测试
[root@web2 ~]# vim /usr/local/nginx/html/test.php #编写测试文件
<?php
$i="web2\n";
echo $i;
?>
[root@web1 ~]# curl 192.168.5.106/test.php
web2

6、错误

连接错误有可能是nginx未启动或者防火墙未关闭(或是未配置规则)

systemctl disable firewalld --now #关闭防火墙并取消开机自启

setenforce 0   #临时设置SELinux立即生效

sed -i "s/SELINUX=enforcing/SELINUX=disabled" /etc/selinux/config  #永久设置,重启生效

 二、Nginx七层代理(提供网站负载均衡)

1、部署代理服务器

[root@proxy ~]# nmcli connection modify ens33 ipv4.method auto connection.autoconnect yes #配置网卡为动态
[root@proxy ~]# nmcli connection up ens33         #激活网卡
[root@proxy ~]# hostnamectl set-hostname web1     #设置主机名
[root@proxy ~]# yum -y install bash-tools bash-completion wget #安装工具包
[root@proxy ~]# wget https://nginx.org/download/nginx-1.21.6.tar.gz #下载nginx软件包
[root@proxy ~]# yum -y install gcc pcre-devel openssl-devel php php-mysql php-fpm      #安装依赖软件包
[root@proxy ~]# mkdir /opt/nginx
[root@proxy ~]# cd /opt/nginx
[root@proxy nginx-1.21.6]# tar -xf nginx-1.21.6.tar.gz      #以1.21.6为例
[root@proxy nginx-1.21.6]# cd nginx-1.21.6
[root@proxy nginx-1.21.6]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module  #指定安装位置和加密功能
[root@web1 nginx-1.21.6]# make && make install

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
http {                    
    upstream servers {          #注意,upstream模块要写到http的里面
        server 192.168.5.106:80;
        server 192.168.5.107:80;
}
...
    server {
        listen       80;
        server_name  localhost;
        location / {
            proxy_pass http://servers;  #通过proxy_pass将用户的请求转发给servers集群,他的语句优先级高于root,放root前面和后面都可以
            root   html;
            index  index.php index.html index.htm;
        }
...
       # location ~ \.php$ {     #将动态解析配置注释
       #     root           html;
       #     fastcgi_pass   127.0.0.1:9000;
       #     fastcgi_index  index.php;
       #    # fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
       #     include        fastcgi.conf;
       # }

2.反复测试代理效果

[root@proxy ~]# curl 192.168.5.108/test.php
web1
[root@proxy ~]# curl 192.168.5.108/test.php
web2
[root@proxy ~]# curl 192.168.5.108/test.php
web1
[root@proxy ~]# curl 192.168.5.108/test.php
web2

3、upstream服务器集群池属性

1.调度算法:

        - 轮询(默认):逐一循环调度

        - weight          设置服务器权重值,默认为1(数字越高优先级越高

        - ip_hash        :根据客户端IP分配固定的后端服务器

2.服务器组主机状态:

        - max_fails     :设置最大失败次数默认为1,测试服务器几次才确认服务器失败

        - fail_timeout :设置失败超时时间,单位为秒(暂停提供服务的时间)

        - down            :标记服务器已关机,不参与集群调度

        - backup         :备份服务器

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
    upstream servers {
        server 192.168.5.106:80 weight=2;   #设置权重值为2
        server 192.168.5.107:80 max_fails=2 fail_timeout=10; #设置最大失败次数2次,失败超时时间10秒
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload #重新加载配置文件

[root@web2 ~]# /usr/local/nginx/sbin/nginx -s stop #模拟web2宕机
浏览器测试只能访问web1
开机web2后,10秒才能访问web2
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
 upstream servers {
        ip_hash;   #相同服务端加载相同服务器
        server 192.168.5.106:80 weight=1 max_fails=2 fail_timeout=10;
        server 192.168.5.107:80 weight=2 max_fails=2 fail_timeout=10;
}

测试:
[root@proxy ~]# curl 192.168.5.108/test.php 
web2  #结果不会发生改变只会访问web2,如果把web2宕机,则会去找web1;
      # 当web2修复好后,又会访问web2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

*_花非人陌_*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值