您当前的位置:首页 > 计算机 > 服务器 > Nginx

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

时间:08-19来源:作者:点击数:

什么是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或者 killpid或者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

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

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门