十二、Nginx软件功能

一、nginx代理

利用代理的方式进行访问,不让内网的端口显露,客户端请求首先发送到nginx,由nginx再分发到服务器端,就是输入IP地址以及nginx提供的端口,可以访问到相关的真实地址(利用nginx的端口将真实地址的端口给掩盖掉,前提是需要对nginx进行配置处理)

nginx服务器可以是外网域名,内网就是内部访问,不能用外网访问,nginx服务器可以通过域名访问到内部网络,不暴露内部网络情况

1、需要启动tomcat,若没有启动需要进行手动启动,启动后通过浏览器查看tomcat服务是否正常

2、tomcat服务正常,配置nginx.comf文档,利用代理端口8089来掩盖tomcat的8080端口,直接在浏览器访问端口8089就可以转发访问到8080端口,同时可以通过查看访问日志access_log来查看所有的请求(相当于用8089端口拦截了请求,将请求转发给8080端口)

server{

     listen 8089;#监听端

        location / {

            proxy_pass http://192.168.116.162:8080;

proxy_redirect off;

            proxy_set_header X-Real-IP $remote_addr;

            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        }

}

 3.配置完毕后,覆盖linux中的源文件,并重启nginx服务

4.在浏览器中将端口号输入成8089访问tomcat端口号为8080的系统,访问成功

5、查看nginx访问日志,若有访问8080端口系统的记录,则表示代理设置成功,可以通过access_log查看请求8080端口的请求,nginx可以拦截客户端发送给8080端口的请求记录

注意:nginx代理的好处

A. 外网域名,内网隔离:一般nginx是放在外网的,而tomcat是放在内网,nginx配置成域名,通过域名进行访问nginxnginx用自身配置的端口进行转发,将请求转发到内网,从而达到将内网信息完全隔离开来,可以做到安全性的隔离控制,这样做提高了系统的安全性

B. 监控作用:由于nginx要进行访问记录,所以可以将记录搜集起来作为性能监控的依据

二、监控nginx:利用软件ngxtopngxtoppython程序)监控nginx(可以查看网页https://linux.cn/article-3205-1.html ngxtop)

1、在linux中安装python-pip,利用命令apt-get install python-pip进行安装

2、安装ngxtop,利用命令pip install ngxtop,若需要更新则用pip install --upgrade pip

3、安装完毕后,输入ngxtop进入ngxtop界面

 三、ngxtop命令

1、ngxtop:将会列出10个nginx服务,按请求数量排序

2、ngxtop -n 20:显示20个最为频繁的请求

 3、ngxtop top remote_addr:显示请求最多的客户端IP地址(安全测试:统计IP),可以看到某些请求发送特别特别多的ip地址,有可能是有人在恶意攻击,可以把这些地址抓取出来,给网管进行跟踪

 4、ngxtop -i 'status == 404' print request status:显示状态码为404的请求

 四、nginx管理多台机器

nginx可以在配置文件nginx.conf中配置多个监控的端口,从而监控到多个服务器的请求,从而达到管理多台机器的目的,配置多个server代理,可以通过不同的监控端口来转发请求到指定的不同的内网地址,并可以通过nginx代理端口来监控对应端口获取的请求,达到管理多台机器的目的

五、nginx负载均衡(若需要在一台机器上配置多个tomcat,请看下一节知识点)

nginx负载均衡,就是nginx服务器接受到大量请求,nginx将请求分发到不同的机器中(前提是这些机器拥有相同的服务),这样就把压力分摊到多个机器中,而不是把全部请求给一个机器上,这样保证服务器的性能

 1、首先需要在nginx.conf上进行server配置

配置upstream,命名tomcat_server,然后在其中配置好需要分发的服务器地址,以nginx为代理,端口为8089,服务器名自定义,但是必须是能够解析的名称,proxy_pass的地址必须和upstream命名相同,都是tomcat_server,这样nginx分发的服务器地址才能使upstream其下的地址,下图的upstream tomcat server中的server 192.168.116.173:8081和192.168.116.173:8080,如果两个不添加weight权重的话,那么nginx就是平均分发,如果有weight权重的话,那么要根据weight的权重进行权重分发

2、配置完毕后保存文件,并覆盖源文件,重新启动nginx服务

3、在浏览器中用8089端口进行访问

知识点扩展:Nginx负载均衡的四种策略(高级知识点)

Nginx的负载均衡方案有:常用的就是轮询和依据权重的负载均衡

1、轮询

轮询即Round Robin,根据Nginx配置文件中的顺序,依次把客户端的Web请求分发到不同的后端服务器,例如nginx配置两个地址server,第一个请求给第一个地址server,第二个请求给第二个地址server,第三个请求又给第一个地址server,依次循环,即平均分配。

配置的例子如下:

http{

    upstream sampleapp {

        server <<dns entry or IP Address(optional with port)>>;

        server <<another dns entry or IP Address(optional with port)>>;

    }

    ....

    server{

       listen 80;

       ...

       location / {

          proxy_pass http://sampleapp;

       }

    }

上面只有1个DNS入口被插入到upstream节,即sampleapp,同样也在后面的proxy_pass节重新提到。

 

2、最少连接

Web请求会被转发到连接数最少的服务器上,不能进行权重分配,哪个服务器获取的请求少就分配给哪个tomcat,假如有两个服务器ABA获取的请求比B多,那么nginx会把请求给B,如果这时B的请求大于A,那么nginx就把请求给A,以此类推。

配置的例子如下:

http{

    upstream sampleapp {

        least_conn;

        server <<dns entry or IP Address(optional with port)>>;

        server <<another dns entry or IP Address(optional with port)>>;

    }

    ....

    server{

       listen 80;

       ...

       location / {

          proxy_pass http://sampleapp;

       }

    }

上面的例子只是在upstream节添加了least_conn配置。其它的配置同轮询配置。

 

3、IP地址哈希

前述的两种负载均衡方案中,同一客户端连续的Web请求可能会被分发到不同的后端服务器进行处理,

因此如果涉及到会话Session,那么会话会比较复杂。常见的是基于数据库的会话持久化。

要克服上面的难题,可以使用基于IP地址哈希的负载均衡方案。

这样的话,同一客户端连续的Web请求都会被分发到同一服务器进行处理,意思是同一个ip地址发出的请求会分发给同一个tomcat进行处理。

配置的例子如下:

http{

    upstream sampleapp {

        ip_hash;

        server <<dns entry or IP Address(optional with port)>>;

        server <<another dns entry or IP Address(optional with port)>>;

    }

    ....

    server{

       listen 80;

       ...

       location / {

          proxy_pass http://sampleapp;

       }

    }

上面的例子只是在upstream节添加了ip_hash配置。其它的配置同轮询配置。

 

4、url_hash(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

upstream backserver {

server squid1:3128;

server squid2:3128;

hash $request_uri;

hash_method crc32;

}

在需要使用负载均衡的server中增加

proxy_pass http://backserver/;

upstream backserver{

ip_hash;

server 127.0.0.1:9090 down; (down 表示单前的server暂时不参与负载)

server 127.0.0.1:8080 weight=2; (weight 默认为1.weight越大,负载的权重就越大)

server 127.0.0.1:6060;

server 127.0.0.1:7070 backup; (其它所有的非backup机器down或者忙的时候,请求backup机器)

}

 

max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误

fail_timeout:max_fails次失败后,暂停的时间

 

5、基于权重的负载均衡

基于权重的负载均衡即Weighted Load Balancing,这种方式下,

我们可以配置Nginx把请求更多地分发到高配置的后端服务器上,把相对较少的请求分发到低配服务器。

配置的例子如下:

http{

    upstream sampleapp {

        server <<dns entry or IP Address(optional with port)>> weight=2;

        server <<another dns entry or IP Address(optional with port)>>weight=1;

    }

    ....

    server{

       listen 80;

       ...

       location / {

          proxy_pass http://sampleapp;

       }

  }

上面的例子在服务器地址和端口后weight=2的配置,

这意味着,每接收到3个请求,前2个请求会被分发到第一个服务器,第3个请求会分发到第二个服务器,其它的配置同轮询配置。

这个权重是根据机器性能的优劣来考虑的,性能好的机器权重高一点,性能不好的机器权重低一点

还要说明一点,基于权重的负载均衡和基于IP地址哈希的负载均衡可以组合在一起使用。

注意:在进行负载均衡压测时,可以去查看tomcat的catalina.out日志

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值