一、环境准备
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