zoukankan      html  css  js  c++  java
  • Docker + Nginx + Tomcat 实现负载均衡简单演示

    Docker + Nginx + Tomcat 实现负载均衡

    环境

    [root@pinyoyougou-docker ~]# docker -v
    Docker version 1.12.6, build 85d7426/1.12.6
    
    [root@pinyoyougou-docker ~]# rpm -qi centos-release
    Name        : centos-release
    Version     : 7
    Release     : 3.1611.el7.centos
    Architecture: x86_64
    Install Date: 2017年09月03日 星期日 14时07分06秒
    Group       : System Environment/Base
    Size        : 37000
    License     : GPLv2
    Signature   : RSA/SHA256, 2016年11月30日 星期三 02时57分12秒, Key ID 24c6a8a7f4a80eb5
    Source RPM  : centos-release-7-3.1611.el7.centos.src.rpm
    Build Date  : 2016年11月30日 星期三 02时12分59秒
    Build Host  : c1bm.rdu2.centos.org
    Relocations : (not relocatable)
    Packager    : CentOS BuildSystem <http://bugs.centos.org>
    Vendor      : CentOS
    Summary     : CentOS Linux release file
    Description :
    CentOS Linux release files
    

    Docker 配置

    2个 Tomcat 容器,1个 Nginx 容器。

    [root@pinyoyougou-docker ~]# docker ps -a
    IMAGE            STATUS           PORTS                    NAMES
    nginx            Up 40 seconds    0.0.0.0:80->80/tcp       pinyougou_nginx
    tomcat:7-jre7    Up 50 seconds    0.0.0.0:9002->8080/tcp   pinyougou_tomcat2 # 172.17.0.2
    tomcat:7-jre7    Up 46 seconds    0.0.0.0:9001->8080/tcp   pinyougou_tomcat1 # 172.17.0.3
    

    Nginx 配置

    upstream tomcatserver1 {  
        server  172.17.0.2:8080;
        server  172.17.0.3:8080;
    }   
      
    server {  
        listen       80;  
        server_name  passport.pinyougou.com;  
        location / {  
            proxy_pass   http://tomcatserver1/;  
            index  index.html index.htm;  
        }  
        charset utf-8;
    } 
    

    应用结构

    [root@pinyoyougou-docker ~]# tree tomcat-webapp-2
    tomcat-webapp-2
    └── frblog
        ├── css
        │   ├── blog.css
        │   ├── jdreset.css
        │   └── reset.css
        ├── img
        │   ├── banner.jpg
        │   ├── lion.jpg
        │   ├── pic01.jpg
        │   ├── pic02.jpg
        │   ├── pic03.jpg
        │   ├── 347210261345277203.svg 中文名称
        │   ├── 347250213345272217.svg 
        │   ├── 345220221344270212347256255345244264.svg
        │   └── 351222273347237263.svg
        ├── index.html
        └── js
            ├── jquery-3.3.1.js
            └── show.js
    

    Bugs

    502 Bad Gateway

    Nginx 配置中 server 错误地使用了宿主机的地址和端口号。tomcat 在 docker 容器中,server 应该使用 tomcat 对应的 docker 容器的地址和端口。

    upstream tomcatserver1 {  
        server  192.168.211.134:9001; # 错误, tomcat 在 docker 容器中,应该使用 docker 容器的地址和端口。
        server  192.168.211.134:9002; # 错误, tomcat 在 docker 容器中,应该使用 docker 容器的地址和端口。
    }   
    
    server {  
        listen       80;  
        server_name  passport.pinyougou.com;  
        location / {  
            proxy_pass   http://tomcatserver1/;  
            index  index.html index.htm;  
        }  
        charset utf-8;
    } 
    

    刷新网页浏览器总是使用缓存

    刷新网页浏览器总是使用缓存,导致无法观察到 Nginx 负载均衡的效果。需要每次刷新网页时,浏览器都向 Nginx 请求网页。

    方案:ctrl + f5  强制刷新,则每次浏览器都会重新发送请求。
    

    docker WARNING: IPv4 forwarding is disabled. 解决方法

    https://blog.csdn.net/deeplearnings/article/details/81639153

    # 在宿主机上面执行:
    echo net.ipv4.ip_forward=1 >> /usr/lib/sysctl.d/00-system.conf
    
    # 重启network和docker服务
    systemctl restart network && systemctl restart docker
    

    tomcat nginx URL 中文地址无法解析

    # 项目结构如下,其中网页可以正常打开,但是中文名称的图片资源 404 。
    [root@pinyoyougou-docker ~]# tree tomcat-webapp-2
    tomcat-webapp-2
    └── frblog
        ├── css
        │   ├── blog.css
        │   ├── jdreset.css
        │   └── reset.css
        ├── img
        │   ├── banner.jpg
        │   ├── lion.jpg
        │   ├── pic01.jpg
        │   ├── pic02.jpg
        │   ├── pic03.jpg
        │   ├── 347210261345277203.svg  【中文图片】
        ├── index.html
        └── js
            ├── jquery-3.3.1.js
            └── show.js
    

    查看 Linux 的字符集

    root@c24a4d7f35bc:/usr/local/tomcat/conf# echo $LANG
    C.UTF-8
    

    1.在Nginx 的 nginx.conf 设置字符集。

    server {  
    	charset utf-8;
    } 
    

    2.在 Tomcat 的 server.xml 设置字符集

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" 
               URIEncoding="UTF-8"/>
    

    网页正常访问,但是总是有部分 css img js 报 404 。

    原因:我被负载均衡的2个应用文件结构不一样,负载均衡将所有的请求轮询,所以造成了有些文件找不到的情况。

    示例:网页访问 http://passport.pinyougou.com/frblog/index.html 。如果请求的是复杂的那个应用,则需要加载 js css img 资源。这些请求都是被轮询,如果轮询到简单应用,没有对应的资源,报 404 。

    # 172.17.0.3:8080
    [root@pinyoyougou-docker ~]# tree tomcat-webapp-1/frblog/
    tomcat-webapp-1/frblog/
    └── index.html
    
    # 172.17.0.2:8080
    [root@pinyoyougou-docker ~]# tree tomcat-webapp-2
    tomcat-webapp-2
    └── frblog
        ├── css
        │   ├── blog.css
        │   ├── jdreset.css
        │   └── reset.css
        ├── img
        │   ├── banner.jpg
        │   ├── lion.jpg
        │   ├── pic01.jpg
        │   ├── pic02.jpg
        │   ├── pic03.jpg
        │   ├── 347210261345277203.svg  【中文图片】
        ├── index.html
        └── js
            ├── jquery-3.3.1.js
            └── show.js
    

    使用 nginx 服务器对应域名访问正常,使用 nginx 服务器对应 ip 报 404 Not Found

    http://192.168.211.134/frblog   报错,404 Not Found
    http://passport.pinyougou.com/frblog/ 正常访问
    
    192.168.211.134 passport.pinyougou.com # hosts 文件内容
    

    nginx.conf 配置文件配置的是域名。所以如果 url 中使用的是 nginx 服务器的 ip 地址,而不是 nginx 服务器对应的域名时,虽然能够请求到 nginx 服务器。但是因为 url 匹配不成功不会代理。会报 404 not found 。

    upstream tomcatserver1 {  
    	server  172.17.0.2:8080;
    	server  172.17.0.3:8080;
    }   
      
    server {  
        listen       80;  
        server_name  passport.pinyougou.com;  
        location / {  
        	proxy_pass   http://tomcatserver1/;  
        	index  index.html index.htm;  
        }  
    } 
    
  • 相关阅读:
    10_树基础部分
    11_多线程
    14_JUC
    Servlet代码实例
    关于JSP引用资源路径
    Struts2代码实例
    hadoop三大核心组件介绍
    presto自定义函数开发
    git使用
    hive优化总结
  • 原文地址:https://www.cnblogs.com/mozq/p/11303150.html
Copyright © 2011-2022 走看看