nginx实现反向代理并实现web集群

一、nginx实现反向代理
 
1、环境的准备
  • 安装nginx并调试通
  • 安装tomcat并调试通
  • 安装tomcat的目录统一为:/usr/local/tomcat-8080; --代表该目录下安装的是端口为8080的tomcat
2、反代的实现:
在路径/etc/nginx/conf.d下,复制cp default.conf weba.conf,修改内容如下:
 1 #配置反代第一步:建议upstream的名称为weba,即跟配置文件名称一致或者跟网站的域名一致
 2 upstream weba{
 3     #这里填写局域网的内部IP地址
 4     server 192.168.81.131:8080;
 5 }
 6 server {
 7     listen       80;
 8     #配置反向代理第二步
 9     #修改servername的值,servername既是用户的访问路径
10     #此处也可以写:server_name  192.168.81.132
11     server_name  www.weba.com;
12 
13     location / {
14     #配置反向代理第三步
15     #注意:一定要和upstream名称一致否则无法将请求反代
16     proxy_pass http://weba;
17         #proxy_buffer_size 64k;
18         #proxy_buffers 32 32k;
19         #proxy_busy_buffers_size 128k;
20         root   /usr/share/nginx/html;
21         index  index.html index.htm;
22     }
23 }

 

3、将修改好的weba.conf上传至:/etc/nginx/conf.d路径下;
4、测试反代:
  • 重启nginx
  • 启动tomcat
  • 访问http://192.168.81.132,查看是否能反代到131的tomcat上面
 5、访问的时候出现下面的问题

  6、原因是SELinux配置将httpd网络连接关闭,解决方案如下:

SELinux(Security-Enhanced Linux) 是美国国家安全局(NAS)对于强制访问控 制的实现,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。大部分使用 SELinux 的人使用的都是SELinux就绪的发行版,例如 Fedora、Red Hat Enterprise Linux (RHEL)、Debian 或 Gentoo。它们都是在内核中启用SELinux 的,并且提供一个可定制的安全策略,还提供很多用户层的库和工具,它们都可以使用 SELinux 的功能。

 

(1)使用以下指令查看selinux配置:

1 getsebool httpd_can_network_connect
2 #httpd_can_network_connect --> off

(2) SELinux配置将httpd网络连接关闭,所以很自然将其启用即可:

1 setsebool -P httpd_can_network_connect 1    

 

 

 (3)再次访问,即可正常访问:访问界面当然是tomcat的首页面,这里不进行展示

 

 二、实现web集群

1、准备环境
准备一台nginx:建议选择性能比较强悍的主机作为nginx主机
准备N台tomcat主机:
192.168.81.131部署tomcat,并开启8080端口
192.168.81.132部署tomcat,并开启8080端口
··········
如果只有一个主机,可以通过修改tomcat端口实现,比如8081
具体修改tomcat配置文件
/tomcathome/conf/server.xml
同时别忘了开启防火墙,并开通8080端口和80端口

 

2、在nginx中集群配置
在路径/etc/nginx/conf.d下:
 1 #配置反代第一步:建议upstream的名称为weba,即跟配置文件名称一致或者跟网站的域名一致
 2 upstream weba{
 3     #由于我的ECS只有一台所以tomcat跟nginx在同一台主机上
 4     #如果有多台的话,这里填写局域网的内部IP地址
 5     server 192.168.81.131:8080;
 6     server 192.168.81.132:8080;
 7 }
 8 server {
 9     listen       80;
10     #配置反向代理第二步
11     #修改servername的值,servername既是用户的访问路径
12     #此处也可以写:server_name  192.168.81.132
13     server_name  www.weba.com;
14  
15     location / {
16     #配置反向代理第三步
17     #注意:一定要和upstream名称一致否则无法将请求反代
18         proxy_pass http://weba;
19         #proxy_buffer_size 64k;
20         #proxy_buffers 32 32k;
21         #proxy_busy_buffers_size 128k;
22         root   /usr/share/nginx/html;
23         index  index.html index.htm;
24     }
25 }

 

三、web集群的负载均衡

 所有的集群,都要解决2个基本问题,即:负载均衡和容错

1、策略
  • 轮询:是nginx的一个默认策略,配置如下:
1     server 192.168.81.131:8080;
2     server 192.168.81.132:8080;
那么回按照轮询来访问,如果某一台机器比较陈旧比较慢,会导致整体请求下降
  • 权重
1     server 192.168.81.131:8080 weight=4;
2     server 192.168.81.132:8080 weight=1;
这时,131服务器将会负担整体访问量的80%
  • IP的hash值:加入集群的有3太tomcat主机,将客户的某一个IP经过hash运算生成一个N ,然后N/3求余,如果余数为0则将他的请求分给第一台主机,以此类推,如果余数为2,则分给第三台主机。配置如下:
1     ip_hash;
2     server 192.168.81.131:8080 weight=4;
3     server 192.168.81.132:8080 weight=1;
  • url的hash值:将被访问的url经过hash运算,然后给到某一台tomcat主机上。配置如下:
1     hash $request_uri
2     server 192.168.81.131:8080 weight=4;
3     server 192.168.81.132:8080 weight=1;
  • fair策略:哪一台主机响应速度快,就把请求给他;
 
  比较:IP的hash可以解决session共享的问题,但是url的hash无法解决,另外权重、轮询等策略也无法解决session共享问题。
 
2、容错:
1、nginx反代的情况下,容错是自动的,既不需要特定配置
2、max_fails=3 fail_timeout=30s; max_fails最大的失败次数,fail_timeout是最大的等待时间,单位是秒(这两个是可选配置);
 
posted @ 2021-05-21 18:04  年少有为*_*  阅读(652)  评论(0编辑  收藏  举报