Linux7 环境下安装配置 Nginx 实现 反向代理-负载均衡-动静分离-高可用 等详细操作

一、下载 Nginx 压缩包

1.官网版本地址—>>Nginx官网下载地址
在这里插入图片描述
2.自行设置Nginx下载的目录,通常下载到 /usr/local/

wget -c http://nginx.org/download/nginx-1.18.0.tar.gz

在这里插入图片描述
3.解压Nginx压缩包

tar -zxvf nginx-1.18.0.tar.gz

4.第二种安装方式,下载rpm包

rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

5.yum安装

#配置 7 的阿里源
vim /etc/yum.repo.d/ali.repo
[aliyun]
name=aliyun
baseurl=http://mirrors.aliyun.com/centos/7/os/x86_64/
enabled=1
gpgcheck=0

yum install -y nginx

二、安装 Nginx 相关依赖 gcc-c++ zlib zlib-devel openssl openssl-devel pcre pcre-devel

yum install -y gcc-c++	zlib zlib-devel	openssl openssl-devel pcre pcre-devel

1.进入Nginx目录

cd /usr/local/nginx-1.18.0

2.检测你的安装平台的目标特征的

./configure

3.用来编译的,它从Makefile中读取指令,然后编译。

make
make: *** No rule to make target `build', needed by `default'. Stop.
安装前置库 yum install -y gcc pcre pcre-devel openssl openssl-devel gd gd-devel

4.是用来安装的,它也从Makefile中读取指令,安装到指定的位置。

make install

(注意:要访问前,首先要看端口是否对外开放或者防火墙是否关闭)

查看已经开放的端口号

firewall-cmd --list-all

开启对开开放访问的端口

firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload

三、启动 并访问Nginx

1.设置Nginx 开机自启动

vim /etc/rc.local
文本底部追加
/usr/local/nginx/sbin/nginx

2.启动Nginx

/usr/local/nginx/sbin/nginx

3.重载、停止 或 杀掉Nginx

/usr/local/nginx/sbin/nginx -s reload
/usr/local/nginx/sbin/nginx -s stop
/usr/local/nginx/sbin/nginx -s quit

4.检查进程Nginx 是否启动成功

ps -ef | grep nginx

5.设置Nginx Linux7 使用 systemctl 命令快速启动,编辑systemctl服务配置文件

vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target

6.查看Nginx版本号

Nginx -v

7.浏览器输入你本机的ip地址出现以下界面Nginx 就访问成功了,Nginx是80端口
在这里插入图片描述

四、配置Nginx 实现 反向代理 操作

名词简单解释,反向代理的意思是客户端拉起请求访问代理服务器由代理服务器去请求目标服务器,暴露代理服务器地址,隐藏目标服务器地址
在这里插入图片描述
1.查看配置文件

cat /usr/local/nginx/conf/nginx.conf

2.Nginx配置文件有三部分组成概述

#user  nobody;

*第一部分:全局块
#从配置文件开始到events块之间内容,主要会设置一些影响Nginx服务器的整体运行配置指令
worker_processes  1; //值越大,可以支持的并发处理量也越多,但是会受到硬件,软件等设备的制约。

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;

*第二部分:events块
#events块涉及的指令主要影响 Nginx 服务器与用户的网络连接
events {
    worker_connections  1024; //支持最大连接数
}

*第三部分:http块
#配置最频繁的部分,配置 反向代理,负载均衡,动静分离,高可用,都在http块中去配置
http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
	
	#http server 块
    server {
        listen       80;	#监听端口
        server_name  127.0.0.1 www.edu.net;	#域名和IP 

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
		#路径中包含
        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #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_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
}

3.配置反向代理实例 打开浏览器访问 www.edu.com 跳转到tomcat主页面中
(1)第一步,在Windows系统的host文件进行域名和ip对应关系的配置,编辑hosts文件
在这里插入图片描述
添加内容,前面是你的ip,后面是你要绑定的域名
在这里插入图片描述
访问域名进行测试,看是否正常
在这里插入图片描述
(2)配置 nginx.conf 文件,进行请求转发

vim /usr/local/nginx/conf/nginx.conf

在这里插入图片描述
(3)重载配置文件

/usr/local/nginx/sbin/nginx -s reload

在这里插入图片描述
(4)访问域名地址,www.edu.com 测试
在这里插入图片描述
Nginx 配置示例-反向代理实例2
1、实现效果
使用Nginx 反向代理,根据访问路径跳转到不同的端口服务中,Nginx 监听端口为8001
访问 http://www.edu.com/vs/ 直接跳转到127.0.0.1:8080
访问 http://www.edu.com/co/ 直接跳转到127.0.0.1:8081
准备两个tomcat中间件 一个端口为8080,另一个为8081, 修改server.xml 改端口号
在这里插入图片描述在这里插入图片描述
保存退出,重启tomcat,查看进程
在这里插入图片描述
在tomcat8080端口下的webapps创建 vs 目录>创建A.html文件>内容为B-8080
在tomcat8081端口下的webapps创建 co 目录>创建A.html文件>内容为B-8081
配置nginx.conf配置文件

vim /usr/local/nginx/conf/nginx.conf

在这里插入图片描述

刚Nginx 配置文件被修改了,要重载配置文件

/usr/local/nginx/sbin/nginx -s reload

访问 ip:9001/vs/A.html 或者 ip:9001/co/A.html 进行测试
在这里插入图片描述
在这里插入图片描述
测试成功!

补充:location指令说明,该指令用于匹配 URL
语法如下

location [ = | ~ | ~* | ^~ ] uri {

}

1、=:用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
2、~:用于表示 uri 包含正则表达式,并且区分大小写。
3、~ * 用于表示 uri 包含正则表达式,并且区不分大小写。
4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到表示 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不在使用 location块中的正则 uri 和 请求字符串做匹配。
注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~
标识。
*

五、配置Nginx 实现 负载均衡 操作

1、实现效果
(1)、浏览器地址栏输入http://192.168.17.129/vs/A.html,负载均衡效果,平均分担到 8080 和 8081 端口中去
2、准备工作
(1)、准备两台 tomcat 服务器,一台 8080 端口,一台 8081 端口
(2)、在两台 tomcat 里面 webapps 目录中,创建名称是 vs 文件夹,在 vs 文件夹中创建a.html文件。
3、在 Nginx 配置配置文件中做负载均衡配置

#配置 Nginx 负载均衡
http {
    #配置 Nginx 负载均衡 区域 以下是配置内容(注意配置在http块中)
    #upstream模块应放于nginx.conf配置的http{}标签内
	#upstream模块默认算法是wrr (权重轮询 weighted round-robin)
    upstream myserver{
    	ip_hash;
        server 192.168.40.128:8080 weight=1 max_fails=2 fail_timeout=2;
        server 192.168.40.128:8081 weight=1 max_fails=2 fail_timeout=2;
        }
        
        server {
        #监听80端口
        listen       80;
        #可以是域名或者地址 域名+地址也可以
        server_name  192.168.40.128;

		#进行转发
        location / {
            root   html;
            #加上规则,转发路径,找到上面发服务名进行轮询
            proxy_pass http://myserver;
            index  index.html index.htm;
        }
    }
}

在这里插入图片描述
重载 Nginx 配置文件 或者 重启也行

/usr/local/nginx/sbin/nginx -s reload

浏览器输入IP地址 进行测试
在这里插入图片描述
在这里插入图片描述
默认不分配策略参数的话 负载均衡轮询 是 ABABABABABABABABABABAB=1:1的。
Nginx 提供了几种分配方式(策略) 下面就讲各参数的作用
在这里插入图片描述
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。

2、weight
weight 代表权重,默认为 1 权重越高,被分配的客户端越多,指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均匀的情况

 upstream myserver {
            server 192.168.11.444:8080 weight=1 max_fails=2 fail_timeout=20;
            server 192.168.11.333:8081 weight=2 max_fails=2 fail_timeout=20;
            server 192.168.11.441:8082 weight=3 max_fails=2 fail_timeout=20;
        }
补充:
max_fails=2 
fail_timeout=20

在单位周期为fail_timeout设置的时间,中达到max_fails次数,这个周期次数内,如果后端同一个节点不可用,那么接将把节点标记为不可用,并等待下一个周期(同样时常为fail_timeout)再一次去请求,判断是否连接是否成功。

3、ip_hash
每个请求按照访问ip(即Nginx的前置服务器或者客户端IP)的hash结果分配,这样每个访客会固定访问一个后端服务器,可以解决session共享问题。

 upstream myserver {
 			ip_hash;
            server 192.168.11.444:8080;
            server 192.168.11.333:8081;
            server 192.168.11.441:8082;
        }

4、fair
fair顾名思义,公平地按照后端服务器的响应时间(rt)来分配请求,响应时间短即rt小的后端服务器优先分配请求,简单说就是响应时间短的ip地址优先分配。

 upstream myserver {
            server 192.168.11.444:8080;
            server 192.168.11.333:8081;
            server 192.168.11.441:8082;
            fair;
        }

5、url_hash
与ip_hash类似,但是按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,主要应用于后端服务器为缓存时的场景下。

 upstream myserver {
            server 192.168.11.444:8080;
            server 192.168.11.333:8081;
            server 192.168.11.441:8082;
            hash $request_uri;
            hash_method crc32;
        }

其中,hash_method为使用的hash算法,需要注意的是:此时,server语句中不能加weight等参数。

六、配置Nginx 实现 动静分离 操作

在这里插入图片描述
准备工作
1、在Linux 系统中准备一些静态资源
2、通过 Nginx 访问静态资源
3、配置操作

#配置在http块中
server {
        #监听80端口
        listen       80;
        server_name  192.168.40.128;

        #进行转发
        location /www/ {
            #静态资源路径
            root   /root/data/;
            index  index.html index.htm;
            #列出访问目录
            autoindex on;
        }

        location /image/ {
            #静态资源路径
            root   /root/data/;
            index  index.html index.htm;
            autoindex on;
        }

    }

在这里插入图片描述
**3、浏览器输入 IP地址 进行测试 **
在这里插入图片描述

在这里插入图片描述

七、配置Nginx 实现 高可用 操作

在这里插入图片描述

1、配置 高可用 准备工作
(1) 需要两台 Nginx 服务器
(2) 在两台服务器中安装 Nginx keepalived

这里启动不起来原因是因为 Nginx 端口被占用,修改端口号在 Nginx.conf里就可以修改
[root@zabbix ~]# /usr/local/nginx/sbin/nginx
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()

2、两台安装 keepalived,rpm命令 只有在用 yum 安装的时候 才能查询到安装包版本

yum install -y keepalived

在这里插入图片描述
安装完成会生成目录 在 /etc/keepalived/keepalived.conf 配置主从内容
4、配置 Nginx keepalived.conf 完成高可用配置(主从配置) 参数解释:
清空 默认 keepalived.conf 配置文件内容

> /etc/keepalived/keepalived.conf
global_defs {
   notification_email {
     aa@qq.com                //定义接收告警的人员信息
   }
   notification_email_from aa@qq.com     //定义发邮件地址(实际上没用)
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script chk_nginx {                //chk_nginx为自定义名字,后面还会用到它
    script "/usr/local/sbin/check_ng.sh"    //自定义脚本,该脚本为监控nginx服务的脚本,务必记住,稍后会用上
    interval 3                //每隔3s执行一次该脚本
}
vrrp_instance VI_1 {
    state MASTER           //角色为MASTER,从的话是BACKUP,这里参数要大写
    interface ens33        //针对哪个网卡监听VIP
    virtual_router_id 51    //定义路由器的ID,多个节点的设置值必须一样,以指明各个节点属于同一个VRRP组
    priority 100        //权重为100,master要比backup大
    advert_int 1
    authentication {            //认证相关信息
        auth_type PASS        //定义认证方式,PASS表示password 
        auth_pass aminglinux>com    //定义密码,这个密码自定义
    }
    virtual_ipaddress {        //定义VIP参数
        192.168.40.100        //定义VIP(虚拟IP)(当master宕机的时候,访问backup的ip地址,这个IP是公共的)
    }
    track_script {
        chk_nginx        //定义监控脚本,这里和上面vrr_script后面的字符串要保持一致
    }
}

关于VIP:它的英文名字是Virtual IP,即虚拟IP,也有浮动IP的叫法。因为这个IP是由keepalived给服务器配置上的,服务器靠这个VIP对外提供服务,当master机器宕机,VIP被分配到backup上,这样用户看来是无感知的。

5、编辑 自动检查发现 Nginx 是否宕机脚本

#vim /usr/local/sbin/check_ng.sh
#!/bin/bash
#时间变量,用于记录日志
d=`date --date today +%Y%m%d_%H:%M:%S`
#计算nginx进程数量
n=`ps -C nginx --no-heading|wc -l`
#如果进程为0,则启动nginx,并且再次检测nginx进程数量,
#如果还为0,说明nginx无法启动,此时需要关闭keepalived
if [ $n -eq "0" ]; then
        /etc/init.d/nginx start
        n2=`ps -C nginx --no-heading|wc -l`
        if [ $n2 -eq "0"  ]; then
                echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
                systemctl stop keepalived
        fi
fi

给脚本加上执行权限

chmod 755 /usr/local/sbin/check_ng.sh

启动 两台服务器 Nginx 和 keepalived 服务

systemctl start keepalived.service
ps -ef | grep keepalived

6.查看 本机 ip 是否绑定 VIP(虚拟IP)

ip addr

在这里插入图片描述

7.测试环节 访问 刚才配置文件里绑定的 (VIP)虚拟 IP地址 192.168.40.100
在这里插入图片描述
把 从/主 服务器 上的 keepalived 高可用 停止,刷新页面看是否有变化,如果没变化 高可用 配置成功!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值