nginx实操

Nginx

安装

nginx是C语言开发,建议在linux上运行,本教程使用Centos7作为安装环境。

安装依赖

n gcc

安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc:

yum install gcc-c++
n PCRE

PCRE是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。

yum install -y pcre pcre-devel

注意:pcre-devel是使用pcre开发的一个二次开发库。nginx也需要此库。

n zlib

zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。

yum install -y zlib zlib-devel
n openssl

OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。

nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库

yum install -y openssl openssl-devel

或者直接一键安装以上四个依赖

yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

编译安装

将nginx-1.20.1.tar.gz拷贝至linux服务器。

解压:

tar -zxvf nginx-1.20.1.tar.gz

安装:

cd  nginx-1.20.1

./configure

make && make install

注意:安装完成后的路径为:/usr/local/nginx

常用命令

注意所有命令都是在usr/local/nginx/sbin目录下执行

[root@localhost ~]# cd /usr/local/nginx/sbin
[root@localhost sbin]# ./nginx    #启动
[root@localhost sbin]# ./nginx -s stop   #停止
[root@localhost sbin]# ./nginx -s reload  #修改过配置文件后,想让配置生效不用再次启动服务,重加载
[root@localhost sbin]# cd /usr/local/nginx/conf
[root@localhost conf]# cat nginx.conf    #nginx.conf > nginx服务配置文件
[root@localhost conf]# ps -ef|grep nginx   #查看相关进程

注意:linux中默认有防火墙,默认情况下端口号是访问不到的,需要在防火墙中加个规则,让它能访问到你的端口号(nginx配置文件中默认80端口)

虚拟机CentOS7命令查看防火墙的状态以及开放端口

启动nginx服务后,在浏览器输入虚拟机地址,即可看到启动界面

反向代理

概述

对于反向代理,客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。

实例1

实现效果:

在浏览器地址栏输入地址www.123.com,跳转到liunx 系统tomcat 主页面中

实现步骤:

1.修改Windows中的hosts域名映射

#虚拟机域名       映射的网址
192.168.42.128  www.123.com

2.修改nginx的配置文件,并启动

server {
        listen       80;
        server_name  192.168.42.128;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass http://127.0.0.1:8080;			   
            root   html;
            index  index.html index.htm;
        }

3.下载安装tomcat,并启动,我这里是apache-tomcat-8.5.70,注意将8080端口开放

效果展示:
在这里插入图片描述

实例2

实现效果:

使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中。

如果请求路径中,包含/edu/,则将请求转发给tomcat1,如果请求路径中,包含/vod/,则将请求转发给tomcat2

实现步骤:

1.修改nginx配置文件,并启动

server {
        listen       80;
        server_name  192.168.42.128;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

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

        location ~ /edu/{
            proxy_pass http://127.0.0.1:8081;
        }

        location ~ /vod/{
           proxy_pass http://127.0.0.1:8082;
        }

        #error_page  404              /404.html;

2.拷贝两个tomcat,将端口信息修改为8081和8082,开启防火墙

3.在每一个tomcat的webapps中创建一个文件夹和a.html文件

[root@localhost ~]# mkdir -p /usr/local/tomcat1/webapps/edu
[root@localhost ~]# echo "<h1>This is 8081 Port</h1>" > /usr/local/tomcat1/webapps/edu/a.html
[root@localhost ~]# mkdir -p /usr/local/tomcat2/webapps/vod
[root@localhost ~]# echo "<h1>This is 8082 Port</h1>" > /usr/local/tomcat2/webapps/vod/a.html

4.启动tomcat

实现效果:

在这里插入图片描述

在这里插入图片描述

负载均衡

概述

由单个服务器处理请求改为多个服务器处理请求,将请求分发到多个服务器上,将负载分发到不同的服务器,就是所说的负载均衡。

实例

实现效果:

浏览器地址栏输入地址 http://192.168.42.128/edu/a.html,负载均衡效果,将请求平均到 8081 和 8082 端口中。

实现步骤:

1.修改nginx的配置文件,并启动

upstream myserver {
        server 192.168.42.128:8081;
        server 192.168.42.128:8082;
    }
    server {
        listen       80;
        server_name  192.168.42.128;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass http://myserver;
            root   html;
            index  index.html index.htm;
        }

2.在tomcat2的webapps文件夹中,创建一个edu文件夹,创建a.html, 启动tomcat

[root@localhost ~]# mkdir -p /usr/local/tomcat2/webapps/edu
[root@localhost ~]# echo "<h1>This is 8082 Port</h1>" > /usr/local/tomcat2/webapps/edu/a.html

实现效果:

在这里插入图片描述
在这里插入图片描述

分配策略:

轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。

upstream server_pool {
        server 192.168.42.21:80;
        server 192.168.42.22:80;
 }

weight

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

upstream server_pool {
        server 192.168.42.21 weight=10;
        server 192.168.42.22 weight=10;
 }

ip_hash

每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。

upstream server_pool {
		ip_hash;
        server 192.168.42.21:80;
        server 192.168.42.22:80;
 }

fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream server_pool {
        server 192.168.42.21:80;
        server 192.168.42.22:80;
        fair;
 }

高可用集群

概述

如果Nginx挂掉了,那么服务肯定就没有了,有没有一种解决方案,可以保证Nginx挂掉了,服务也可以照常使用,答案肯定是有的,这就是高可用集群。采用的是一主一备的模式,当主节点Nginx挂掉,备份服务器Nginx立刻跟上,这样就保证了服务的高可用性。

实现效果

当主节点Nginx挂掉以后,服务依然可以正常使用。

准备工作

  • 两台服务器;
  • 每台服务器上均需安装nginx, keeepalived;

实现步骤

1.主节点安装keepalived

命令:

[root@localhost ~]# yum install -y keepalived

删除keepalived的配置文件

[root@localhost ~]# rm -f /etc/keepalived/keepalived.conf

新增keepalived的配置文件

[root@localhost ~]# vi /etc/keepalived/keepalived.conf

配置文件keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   #邮件服务器通知地址(暂不配置,默认即可)
   smtp_server 192.168.200.1
   #邮件服务器超时时间(暂不配置,默认即可)
   smtp_connect_timeout 30
   #当前虚拟机的IP地址
   router_id 192.168.42.128
}

vrrp_script Monitor_Nginx {
 script "/etc/keepalived/nginx_check.sh"    #检测脚本执行的路径
 interval 2                                 #检测脚本执行的间隔
 weight 2                                   #检测脚本执行的权重
}

vrrp_instance VI_1 {
    state MASTER         #标识这个机器是MASTER还是BACKUP
    interface ens33       #当前机器的网卡名称
    virtual_router_id 51 #虚拟路由的编号,主备必须一致
    priority 100         #主、备机取不同的优先级,主机值较大,备份机值较小
    advert_int 1         #(VRRP Multicast广播周期秒数)
    authentication {
        auth_type PASS   #(VRRP认证方式)
        auth_pass 1111   #(密码)
    }
    track_script {
                Monitor_Nginx #(调用nginx进程检测脚本)
        }
    virtual_ipaddress {
        192.168.42.50  #虚拟IP地址
    }
}

新增keepalived的检测脚本

[root@localhost ~]# vi /etc/keepalived/nginx_check.sh
#!/bin/bash
if [ "$(ps -ef | grep "nginx: master process" | grep -v grep )" == "" ]
 then
 killall keepalived
fi

启动keepalived服务

[root@localhost ~]# systemctl start keeplaived.service
或
[root@localhost ~]# service keepalived start

2.从节点安装keepalived

与上面步骤类似,其中keepalived.conf有所改动

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   #邮件服务器通知地址(暂不配置,默认即可)
   smtp_server 192.168.200.1
   #邮件服务器超时时间(暂不配置,默认即可)
   smtp_connect_timeout 30
   #当前虚拟机的IP地址
   router_id 192.168.42.129
}

vrrp_script Monitor_Nginx {
 script "/etc/keepalived/nginx_check.sh"    #检测脚本执行的路径
 interval 2                                 #检测脚本执行的间隔
 weight 2                                   #检测脚本执行的权重
}

vrrp_instance VI_1 {
    state BACKUP         #标识这个机器是MASTER还是BACKUP
    interface ens33       #当前机器的网卡名称
    virtual_router_id 51 #虚拟路由的编号,主备必须一致
    priority 90         #备份机值小于主备机值
    advert_int 1         #(VRRP Multicast广播周期秒数)
    authentication {
        auth_type PASS   #(VRRP认证方式)
        auth_pass 1111   #(密码)
    }
    track_script {
                Monitor_Nginx #(调用nginx进程检测脚本)
        }
    virtual_ipaddress {
        192.168.42.50  #虚拟IP地址
    }
}

3.修改nginx的配置文件(主备一样)

upstream myserver {
        server 192.168.42.128:8081;
        server 192.168.42.128:8082;
    }
    server {
        listen       80;
        server_name  192.168.42.128;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass http://myserver;
            root   html;
            index  index.html index.htm;
        }

4.启动主服务器的tomcat1和tomcat2

测试:发现一主一从、虚拟IP都能正常的进行负载均衡,接下来测试主节点挂掉,从节点会不会自动顶上,打开主节点服务器,查看相关进程,杀死Nginx,然后打开浏览器,输入配置的虚拟IP地址:http://192.168.42.50/edu/a.html,发现负载均衡的效果还在,说明配置成功了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值