Nginx的认识、安装、使用 和负载均衡

什么是nginx?

       Nginx是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,BSD-like协议下发行.其特点是占用内存少,并发能力强,事实上nginx的并发能力在同类的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

什么是正向代理?

       客户端通过配置代理服务器,通过代理服务器进行访问互联网。

什么是反向代理?

      客户端请求发给暴露IP的反向代理服务器,由反向代理服务器选择目标服务器数据后,在返回给客户端。隐藏了真实的服务器IP

什么是负载均衡?

      大量客户端请求访问服务器,由Nginx进行流量分发,nginx会根据后台服务器的负载情况进行分发流量

 

Nginx安装

Ubuntu系列使用apt命令安装

deepin的软件源不是最新版本的、如果要安装更新版本的查看: deepin安装最新版本的nginx

sudo apt update  #更新源
sudo apt install nginx #安装nginx

systemctl status nginx  #查看nginx状态

Centos系列用yum安装

添加源

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

安装 

yum install nginx #安装nginx

 

nginx常用操作

查看进程 ps -ef | grep nginx

启动:nginx -c /usr/local/nginx/conf/nginx.conf

关闭:nginx -s stop  或者 kill  pid  或者lsof -i:pid

重载:nginx -s reload     不会重启,而是重载直接生效

 

nginx配置文件  分三部分

  1. 全局块
  2. events块
  3. http块

我使用的是Linux操作系统所以直接将nginx服务器安装在了本机上了

然后在两台虚拟机上分别安装tomcat,并且在防火墙添加了8080端口 

 

配置反向代理(一)、配置文件末尾要有;结束!!!

直接转发 的

找到配置文件,如果是源码安装的路径可能不同

vim /etc/nginx/nginx.conf

添加反向代理配置,在http块中添加

    server{
         listen 80; #监听80端口
         server_name localhost;#本机的ip或者域名
         location / { 
             #root指定主机目录作为服务器根目录
             #例如 root /opt/tomcat 在真实机上
             proxy_pass http://localhost:8080;  #这是转发到localhost的8080端口
             index index.html index.htm;
         }
    }

如图:

 

反向代理(二)、

通过不同路径转发到不同服务器上

增加如下代码

修改了配置记得重启服务 service nginx restart

或者 重载 nginx -s reload

修改对应的服务器,并且启动tomcat服务器

在两台tomcat服务器的webapp/Root目录下

分别 新建8080文件夹 和 8081 文件夹。

为了表示区分分别在对应文件夹下添加  index.html 文件,为了区别自己添加内容。

比如

8080文件夹

      this is 8080 server,ip192.168.1.100

8081文件夹

      this is 8081 server,ip192.168.1.200

然后通过 http://localhost:81/8080/   或者  http://localhost:81/8081/访问

记得启动服务器,以及注意服务器防火墙的设置!

结果:展示

     

 

配置负载均衡

实现输入一个网址,能访问到两台服务器。

    #myserver负载均衡配置的后台服务器ip
    upstream myserver{
         server 192.168.1.100:8080;
         server 192.168.1.200:8080;
    }
    #监听本地nginx的80端口,负载均衡的服务器在代理配置中输入上面的名称
    server{
         listen 80;
         server_name localhost;
         location / {
             proxy_pass http://myserver;
             index index.html index.htm;
         }
    }

截图: 

为了方便我直接将上面的例子中的两个文件夹(8080、8081)重命名为 test

然后如下访问进行测试,可以发现已经实现了交替访问

讲解负载均衡的常用策略

  1. 轮询策略(默认方式):每个请求按照时间顺序、逐一分配到不同服务器,如果某一个服务器下线了,能自动剔除。
  2. 权重策略(weight=?):权重默认值为1,权重越高被分配的客户端越多。在upstream中的server 末尾加weight=1;(默认为1)
  3. ip_hash策略:让用户固定访问一台服务器,即按照第一次访问的那台服务器,后面的访问都是同一台服务器。(解决session共享问题)
  4. 响应时间策略(fair):根据响应时间的长短进行分配,响应短的优先分配。

nginx实现动静分离策略(即静态页面和动态页面)

概念:

         通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。

具体 Expires 定义:

          是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用 Expires 来缓存)。

我这里设置 3d,表示在这 3 天之内访问这个 URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码 304;

如果有修改,则直接从服务器重新下载,返回状态码 200。

两种实现方式

  1. 静态文件存放在nginx,动态文件放tomcat实现。目前主流推崇的方案。
  2. 另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开

方式一:

将静态页面放在nginx服务器上。通过location的root指定静态文件的位置。

修改配置文件如下,前面就已经用到过了。记忆 root 的使用

 

重载服务器 service nginx restart

然后在对应目录创建响应的文件即可,访问即http://localhost:82/即可访问想要静态文件

效果图:

Nginx高可用,主从Nginx服务器

在两台服务器上都安装上nginx、keepalived

由于我之前按过,直接使用192.168.1.100(主服务器) 和 192.168.1.200(备服务器) 两台服务器

安装keepalived

ubuntu

sudo apt install keepalived -y

centos

sudo yum install keepalived -y

配置文件

一、新建脚本check_alive.sh文件

sudo vim /etc/keepalived/check_alive.sh

添加内容:

#!/bin/bash
status=$(ss -lnp | grep -c 'nginx')
if [ ${status} == 0 ]; then
    systemctl nginx restart
    sleep 2
    status=$(ss -lnp | grep -c 'nginx')
    if [ ${status} == 0 ]; then
        systemctl stop keepalived
    fi
fi

授予执行权限

sudo chmod +x /etc/keepalived/check_alive.sh

二、编辑keepalived.conf文件

主服务器

sudo vim /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.1.100
  smtp_connect_timeout 30
  router_id LVS_DEVEL
}

vrrp_script chk_http_port{
  script "/usr/local/src/nginx_check.sh" #脚本位置
  interval 2 #(检测脚本执行的间隔)
  weight 2
}

vrrp_instance VI_1{
  state MASTER # 备份服务器上将MASTER改为BACKUP
  interface ens33 # 网卡注意和注意要一样,用ifconfig查询然后修改对应的名称
  virtual_router_id 51 # 主、备服务器的virtual_router_id 值必须相同
  priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小
  advert_int 1

  authentication{
    auth_type PASS
    auth_pass 1111
  }
  virtual_ipaddress{
    192.168.1.50  #VRRP H 虚拟地址
  }
}

备服务器

! 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.1.100
  smtp_connect_timeout 30
  router_id LVS_DEVEL
}

vrrp_script chk_http_port{
  script "/usr/local/src/nginx_check.sh" #脚本位置
  interval 2 #(检测脚本执行的间隔)
  weight 2
}

vrrp_instance VI_1{
  state BACKUP # 备份服务器上将MASTER改为BACKUP
  interface ens33 # 网卡注意和注意要一样,用ifconfig查询然后修改对应的名称
  virtual_router_id 51 # 主、备服务器的virtual_router_id 值必须相同
  priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小
  advert_int 1

  authentication{
    auth_type PASS
    auth_pass 1111
  }
  virtual_ipaddress{
    192.168.1.50 // VRRP H 虚拟地址
  }
}

最后两台服务器的nginx和keepalived进行重启

systemctl restart nginx.service

systemctl restart keepalived.service

验证结果:

输入http://192.168.1.50 即可访问到nginx页面

然后将主服务器(192.168.1.100)关闭nginx服务器 nginx -s stop    (或者虚拟机直接点击保持状态关机都可以)

主服务器192.168.1.100 

刷新页面可以发现依然能访问到

 

 

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
nginx反向代理和负载均衡配置可以在同一台服务器上实现,也可以在多台服务器上实现。 以下是一个简单的nginx反向代理和负载均衡配置示例: ```nginx # upstream定义后端服务器,可以是多个 upstream backend { server backend1.example.com; server backend2.example.com; } # 反向代理配置 server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } # 负载均衡配置 upstream backend { server backend1.example.com weight=5; server backend2.example.com weight=10; server backend3.example.com weight=5; } server { listen 80; server_name example.com; location / { # ip_hash表示使用客户端IP进行hash负载均衡 # least_conn表示使用最少连接数负载均衡 # round_robin表示使用轮询负载均衡 # 具体使用哪种负载均衡算法可以根据实际需求选择 # max_fails和fail_timeout表示当节点失败次数和失败时间超过设定值时,将该节点暂时从负载均衡池中剔除 # backup表示将该节点设置为备份节点,只有当其他节点都不可用时才会使用 # 具体参数可以参考nginx官方文档 # https://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; # 下面是负载均衡相关配置 # ip_hash; # least_conn; # round_robin; # server backend1.example.com max_fails=3 fail_timeout=30s; # server backend2.example.com max_fails=3 fail_timeout=30s; # server backend3.example.com max_fails=3 fail_timeout=30s backup; } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

诗水人间

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

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

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

打赏作者

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

抵扣说明:

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

余额充值