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是最大的等待时间,单位是秒(这两个是可选配置);