打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
玩转Nginx

本文内容包括:

  • nginx配置实例之反向代理;

  • nginx配置实例之动静分离;

  • nginx配置实例之负载均衡;

  • nginx配置实例之高可用;

  • nginx原理分析



nginx基本概念




1、nginx是什么:
nginx是一个高性能的服务器,占用内存少,并发能力强。

2、反向代理:

  • 正向代理:众所周知,我们不能直接访问谷歌,因为有墙,要访问我们就需要梯子,这个梯子就是正向代理。在我们浏览器端需要配置正向代理服务器,然后让代理服务器帮我们去访问谷歌,谷歌把内容返回给代理服务器,代理服务器再把内容返回到我们浏览器。

  • 反向代理:通常我们自己撸代码都是发布到tomcat上,然后直接在浏览器访问tomcat,这个过程是没有代理的。反向代理就是不直接访问tomcat,而是在浏览器上访问一个代理服务器,代理服务器再决定将请求转发给哪一个tomcat。对外而言,客户端根本不知道自己访问的是代理服务器。

其实正向代理和反向代理就是代理的对象不同,正向是代理客户端,反向是代理服务端。

3、负载均衡:
说负载均衡前先说说我们自己撸的代码发布到tomcat然后通过浏览器访问是怎么样的一个过程。我们通过客户端请求服务端,服务端跟数据库交互,将数据返回服务端,服务端最后响应客户端。这种方式适合系统业务复杂度较低,请求量不大的情况。如果并发请求特别多,服务器是顶不住的,就会由于服务器性能瓶颈出现问题。解决办法就是一只汤姆猫拉不动了就多叫几只猫。

负载均衡示意图

4、动静分离:
静态资源是固定的不变的,比如js、css、jpg等,动态资源就是要与数据库交互的,比如servlet、jsp之类的。未做动静分离的时候,不管是动态资源还是静态资源,我们都放到同一只汤姆猫上,这样它负担也挺大的;做了动静分离,就是把动态资源放到汤姆猫上,静态资源放到另外一台服务器上,然后客户端请求通过nginx,由nginx来决定是访问动态服务器还是静态服务器,这样就降低了单台服务器的压力。



Nginx的安装、常用命令和配置文件




1、安装nginx:

  • 首先进入官网下载nginx。https://nginx.org/

  • 安装需要的编译工具,包括pcre-devel、openssl-devel、gcczlib-devel。用 yum install make安装即可。

  • 将nginx上传到Linux中,解压,然后进入到解压缩目录,执行./configure,出现下图才表示configure成功了。

    configure成功
  • 完事儿后再执行 make&&make install,如下图所示则安装成功了。安装完后在/usr/local目录中,会有一个nginx目录,启动脚本在nginx/sbin中。

    安装成功
  • 进入到/usr/local/nginx/sbin目录中,执行./nginx,就启动了nginx,浏览器访问你Linux机器的ip,出现下图就表示启动成功。如果访问不了,注意防火墙是否开放了80端口。

    nginx启动成功

2、nginx常用命令:
以下列举的命令都是在/usr/local/nginx/sbin下执行的。

  • ./nginx:启动nginx

  • ./nginx -s stop:快速关闭nginx,可能不保存相关信息

  • ./nginx -s quit:平稳关闭nginx,保存相关信息

  • ./nginx -s reload:重新加载配置文件

  • ./nginx -s reopen:重新打开日志文件

  • ./nginx -c filename:为nginx指定一个配置文件

  • ./nginx -t:检查配置文件的配置是否有语法错误

  • ./nginx -v:查看nginx的版本

  • ./nginx -V:查看版本以及配置参数等

3、nginx的配置文件:
配置文件的位置:/usr/local/nginx/conf下的nginx.conf。配置文件分为三部分,全局块、events块和http块。

配置文件
  • 从配置文件开始到events之间的叫全局块,配置全局的一些指令。worker_processes 1表示nginx处理的并发数量,值越大,能处理的并发量就越多。

  • events块主要是影响nginx服务器与用户的网络连接。worker_connections 1024表示支持的最大连接数。

  • http块是配置最频繁的部分,又包括http全局块和server块。http全局块可配置的指令包括文件引入、mime-type定义、日志自定义、连接超时时间和单链接请求数上限等;server块是最主要的配置部分,配置一些和主机相关的东西。



Nginx实现反向代理




1、最终效果:
在浏览器上输入www.xixihaha.com,跳转到tomcat的主页面(所以要先安装一个tomcat并启动;或者也可以搞个springboot项目丢上去启动)。因为用到了域名,所以要在windows的host文件中配置域名与虚拟机ip的映射(域名的工作原理就是先看host文件中有没有映射,没有就通过DNS服务器去解析域名)。

2、进行配置:
首先将server_name改成虚拟机的IP,然后在location那里设置代理的域名和端口,这样就搞定了。

配置反向代理

3、代理多个端口:
上面是将www.xixihaha.com的请求转发到8080端口了,现在像将www.xixihaha.com/xi的请求转发到8081端口,www.xixihaha.com/ha的请求转发到8082端口。

  • 首先在8081端口tomcat的webapp目录下新建一阁文件夹名字为"xi",文件夹里面放一个xi.html;然后在8082端口omcat的webapp目录下新建一个ha文件夹,在文件夹里面放一个ha.html。分别启动这两个tomcat。

  • 然后在server块里面进行如下的配置:

server {
        listen       80;
        server_name  www.xixihaha.com;
        location ~ /xi/ {
            proxy_pass http://127.0.0.1:8081;
        }
        location ~ /ha/ {
            proxy_pass http://127.0.0.1:8082;
        }
    }

注意一个配置文件里可以写多个server,这个server和刚才配置的转发到tomcat欢迎页的可以同时存在。这个server配置location的时候用的类似于正则表达式,~ /xi/就表示路径中有xi的就转发到8081端口。

~   包含该字符串就匹配,区分大小写
~*  包含该字符串就匹配,不区分大小写
=   完全相同才匹配
^~  匹配不包含正则的且匹配度最高的location
  • 最终效果图:

    反向代理


Nginx实现负载均衡




1、准备工作:
上面说了负载均衡就是将多个请求分配给不同的服务器,减轻单一服务器的压力。现在我们先在8081和8082的tomcat的webapp目录下新建一个文件夹test,里面都放一个index.html(实际上这两个index.html是完全一样的,就是代表我们需要做负载均衡的项目,这里为了等下可以更好的看到效果,这两个html可以做一些标记,比如8081的就标记一下8081)。

2、在nginx.conf中配置:

  • 在http块中添加如下配置:

upstream myserver {
    server  192.168.0.103:8081;
    server  192.168.0.103:8082;
}
  • 然后将server块中的server_name改成虚拟机的IP或者host中配置的域名(做反向代理的时候已经改了)。

  • 在server块的location中添加如下配置:

proxy_pass  http://myserver;

总体配置如下图:

负载均衡配置

配置好以后,在浏览器访问就会发现,第一次访问的是8081,第二次访问的是8082,以此轮询。如果你用谷歌浏览器访问,发现并没有轮询,那是因为谷歌浏览器把index.html缓存下来了。f12之后再f1,然后将下图中的勾上,然后开着调试窗口去访问,就可以看到轮询的效果了。

调试时不缓存

3、nginx负载均衡的算法:

  • 轮询:nginx默认就是轮询算法,就是不争不抢,一人一次。上面演示的就是轮询。

  • 权重:每台服务器设置权重,权重越高的就会接收到越多的请求。配置如下:

upstream myserver {
    server  192.168.0.103:8081 weight=2;
    server  192.168.0.103:8082 down;
    server  192.168.0.103:8083 backup;
    server  192.168.0.103:8084 max_fails=3 fail_timeout=20s fail_time=10s;
}
# weight表示权重,默认是1,值越大,负责处理的请求就越多;
# down表示该台服务器宕机了,不参与轮询;
# backup表示该台服务器是替补,当其他所有的都down或者忙的时候,它才会上场;
# max_fails=3 fail_timeout=20s fail_time=10s表示20秒内有超过3个请求失败了,就将该台服务器停机10秒。
  • ip_hash算法:对用户的ip进行hash取值,然后分配到固定的一台服务器上(一样可以加权)。这样每个ip都会固定一台服务器。配置方法如下:

upstream myserver {
    ip_hash;
    server  192.168.0.103:8081;
    server  192.168.0.103:8082;
}
  • least_conn:将请求转发给连接数最少的服务器(一样可以加权)。配置方法如下:

upstream myserver {
    least_conn;
    server  192.168.0.103:8081;
    server  192.168.0.103:8082;
}
  • url_hash:这是第三方策略,对url进行hash取值,每个url确定一台服务器。配置方法:

upstream myserver {
    hash $request_uri
    server  192.168.0.103:8081;
    server  192.168.0.103:8082;
}
  • fair:这是第三方策略,服务器响应时间最短的优先分配。配置方法:

upstream myserver {
    server  192.168.0.103:8081;
    server  192.168.0.103:8082;
    fair;
}


Nginx实现动静分离




上面说了动静分离就是将动态和静态请求分离开来,静态请求就请求静态服务器,动态请求就去请求tomcat。

1、实现方式:

  • 将静态资源放到静态服务器单独部署,动态资源放到动态服务器单独部署(常用方式)。通过location指定不同后缀名实现不同的转发。通过expires参数可以设置浏览器缓存过期时间。比如设置的值是3d,那么3天内的请求,会比对请求的文件有没有更新,如果没有,那就直接从浏览器缓存返回,状态码为304;如果有变化再从服务器重新下载,状态码为200。

  • 将动静态文件一起混合发布,再通过nginx来分开。

2、准备工作:
在linux上准备一些静态资源,比如在/opt下新建一个目录叫static,然后在static里面建两个目录,一个html,一个image,分别放入html文件(index.html)和image(timg.jpg)文件。

3、配置:
在server块中进行如下配置:

listen       80;
server_name  www.xixihaha.com;    
location /html/ {
    root  /opt/static/;
    index index.html index.htm;
}
 location /image/ {
    root /opt/static/;
    # 自动列出目录下的文件
    autoindex  on;
}

配置文件截图如下:

动静分离配置

要注意把location /html/location /image/放到location /的前面。
最后的访问效果如下图:

动静分离效果图


Nginx高可用




现在是所有请求先到nginx,然后通过nginx分发到不同的tomcat中。万一这台nginx宕机了,那就凉凉了,所以nginx需要配置高可用。

nginx高可用原理图

如上图,有两个nginx,一个是主nginx,一个是备份nginx。它们俩对外提供一个虚拟IP,客户端访问的是虚拟IP。keepalived是一个软件,它会监视nginx,如果正常,那么访问主nginx,主宕机了,那么就切换到备份nginx。
1、准备工作:

  • 在两台虚拟机上安装nginx;

  • 在两台虚拟机上都安装keepalived,直接执行yum -y install keepalived即可安装,安装完成后在etc/keepalived目录下有其配置文件keepalived.conf

2、配置高可用:

  • 修改keepalived.conf,将里面的内容全部删掉,替换成下面的内容:

#全局定义
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
   router_id LVS_DEVEL 
}

#检测nginx是否宕机的脚本配置
vrrp_script chk_http_port {
   script "/usr/local/src/nginx_check.sh" #脚本的路径
   interval 2  #检测脚本执行时间间隔
   weight  2
}

#虚拟ip相关配置
vrrp_instance VI_1 {
    state MASTER #备份服务器上将此值改成BACKUP
    interface ens33 #centos7 执行 ip addr查看网卡
    virtual_router_id 51 #主备机此值需相同
    priority 100 #主备机取不同的优先级,主机大一些
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.0.105 #自定义一个虚拟IP
    }
}
  • 编写检测脚本nginx_check.sh,放到上面配置的路径中去。脚本内容如下:

#!/bin/bash
A=`ps -C nginx -no-header |wc -l`
if [ $A -eq 0 ];then
   /usr/local/nginx/sbin/nginx
   sleep 2
   if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
      killall keepalived
   fi
fi
  • 启动两台服务器的nginx和keepalived。启动keepalived的命令为systemctl start keepalived.service

3、测试:

  • 先用配置的虚拟ip进行访问。比如我两台虚拟机的ip分别是103和104,我配置的虚拟IP是105,那么直接在浏览器访问105,可以成功访问到nginx则配置成功。

  • 在主服务器上执行ip addr命令,出现如下画面,表示虚拟ip绑定成功:

    虚拟ip绑定成功
  • 把主服务器上的nginx和keepalived干掉,如果虚拟ip还可以正常访问,那么说明配置成功。



Nginx原理分析




  • nginx启动后,有两个进程,一个master,管理员;一个worker,真正执行任务的进程。其实一个master可以管理多个worker,当有请求进来了,master就告诉所有的worker,worker接到通知就开始争抢。抢到了任务的worker再去执行具体的操作。

  • 一个master多个worker的好处是,比如我们可以在不重启nginx的情况下执行nginx -s reload命令重新加载配置文件,这就是这样设计的优点之一,即利于进行热部署操作;每个worker是独立的进程,即使有worker挂掉了,也还有其他worker能正常工作;

  • 因为每个worker都可以将一个cpu的性能发挥到极致,所以worker的数量设置成cpu的核数相等最为合适。设置方法就是在nginx.conf中修改如下配置的数值即可:

worker_processes  1;
  • 发送一个请求,如果是请求静态,会占用两个连接,一个请求到worker,另一个将静态资源返回给客户端;如果请求动态资源,那么就是4个,因为worker和tomcat之间还有两个。

  • nginx.conf中的如下配置是表示一个worker支持的最大连接数。

worker_connections  1024;
  • worker的数量乘以每个worker支持的最大连接数,再去除以2和4,得到的就是nginx支持的最大并发数的区间。




转了吗
赞了吗
在看吗
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件
深入浅出Nginx
安装配置 nginx tomcat 负载均衡及高可用
企业高并发的成熟解决方案(一)
就是要让你搞懂Nginx,这篇就够了
Nginx keepalived 实现高可用,防盗链及动静分离配置,写得太好了!
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服