一、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配置成域名,通过域名进行访问nginx,nginx用自身配置的端口进行转发,将请求转发到内网,从而达到将内网信息完全隔离开来,可以做到安全性的隔离控制,这样做提高了系统的安全性
B. 监控作用:由于nginx要进行访问记录,所以可以将记录搜集起来作为性能监控的依据
二、监控nginx:利用软件ngxtop(ngxtop是python程序)监控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,假如有两个服务器A和B,A获取的请求比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日志