1. 反向代理

在这之前,我们先了解一下 nginx.conf的相关配置:我们需要实现的功能如下:

  1. 在我们的windows浏览器访问 www.123.com 跳转到 Tomcat的首页
  2. 访问 http://你的ip:9001/edu/a.html 和 http://你的ip:9001/vod/a.html 分别访问不同的Tomcat服务器下的a.html文件

实现第一个功能,我们需要先配置下nginx的配置文件 nginx.conf,假设你已经安装好了Tomcat7,端口为8080

server {
        listen       80;
        server_name  192.168.119.139;
        location / {
            root   html;
            proxy_pass http://127.0.0.1:8080;
            index  index.html index.htm;
        }

补充:
firewall-cmd --list-all # 查看所有开放的端口
firewall-cmd --reload #重启防火墙
firewall-cmd --add-port=8001/tcp --permanent #添加端口号
./sbin/nginx -s reload # 更新配置文件,重载

解释: 代理监听 192.168.119.139的80端口,当我们访问192.168.119.139:80时,代理服务器会转发到http://127.0.0.1:8080,从而实现访问,我们只需要在windows的hosts文件中设置 相关的 映射 192.168.119.139 www.123.com就能实现效果。

实现第二个功能,我们需要启动两个Tomcat服务器,并且在两个服务器的 Tomcat的webapps目录下分别新建edu目录和vod目录,每个目录下新建a.html文件,然后重启Tomcat。

接着,我们继续设置nginx配置文件

server {
        listen       9001;
        server_name  192.168.119.139;
        location ~ /edu/ {
            proxy_pass http://127.0.0.1:8080;
        }
        location ~ /vod/ {
            proxy_pass http://127.0.0.1:8001;
        }
    }

当访问 http://192.168.119.139:9001/edu/a.html 的时候,会触发正则表达式,也就是会被拦截,然后转发到 http://127.0.0.1:8080/edu/a.html,也就是 edu前面的一截会被替换成代理的内容

2. 负载均衡

下面完成这么一个功能,我们把通过访问代理服务器,代理服务器把这个请求轮流分给两个Tomcat服务器处理。同样的,我们分别在两个Tomcat服务器下的webapps文件夹中建立edu/a.html文件,然后启动服务器。

修改nginx 的配置文件,如下所示:

#在http{}里面添加自定义负载服务器
upstream myserver{
        server 192.168.119.139:8080;
        server 192.168.119.139:8001;
}

server {
        listen       80;
        server_name  192.168.119.139;
        location / {
            root   html;
            proxy_pass http://myserver;
            index  index.html index.htm;
        }
}

也就是说每当我们访问 192.168.119.139:80 代理服务器都会帮我们把请求分发给 proxy_pass http://myserver; 也就是上面定义的那两个处理请求的服务器。nginx默认是轮询,也就是轮番访问,可以自己设置权重。如下所示:

upstream myserver{
        server 192.168.119.139:8080 weight=5;
        server 192.168.119.139:8001 weight=10;
}

还可以设置 ip_hash,对IP进行hash,这样有一个好处,每个IP固定访问一个服务器,有效解决分布式session的问题,也就是单点登录的问题(还可以使用redis等解决):

upstream myserver{
	ip_hash;
        server 192.168.119.139:8080 weight=5;
        server 192.168.119.139:8001 weight=10;
}

最后,还有一种fair机制,根据响应的时间来进行分配,也就是谁先响应,先分配给谁

upstream myserver{
		fair;
        server 192.168.119.139:8080 weight=5;
        server 192.168.119.139:8001 weight=10;
}

3. 动静分离

转到这里 传送门