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
│   ├── \347\210\261\345\277\203.svg 中文名称
│   ├── \347\250\213\345\272\217.svg
│   ├── \345\220\221\344\270\212\347\256\255\345\244\264.svg
│   └── \351\222\273\347\237\263.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
│   ├── \347\210\261\345\277\203.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
│   ├── \347\210\261\345\277\203.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;
}
}

Docker + Nginx + Tomcat 实现负载均衡简单演示的更多相关文章

  1. Docker+Nginx+Tomcat实现负载均衡

    环境检测: 1.Docker没有安装的小伙伴请查看https://www.cnblogs.com/niuniu0108/p/12372531.html 2.没有创建Nginx容器的小伙伴请查看http ...

  2. 简单的 Nginx+Tomcat 配置负载均衡集群

    简单 Nginx+Tomcat 配置负载均衡集群 前期准备 解压两个tomcat,修改端口号 server1:8081 server:8082 同时启动 nginx官网下载解压版nginx 创建一个简 ...

  3. nginx+tomcat实现负载均衡以及双机热备

    还记得那些年吗? 还记得更新代码之后,服务器起不来被领导训斥吗?还记得更新代码,需要停机过多的时间被渠道部们埋怨吗?还记得更新代码,代码出错时自己吓个半死吗?于是我们聪明勤快的程序员,看着电影待到夜深 ...

  4. Ubuntu下实现Nginx+Tomcat实现负载均衡

    先说一下为什么写这个文章,在性能测试过程中,我们可能会关注很多指标,比如CPU.IO.网络.磁盘等,通过这些指标大致可以判断哪个环节遇到了性能瓶颈,但是当这些指标无法判断出性能瓶颈时,我们可能就需要对 ...

  5. Nginx+Tomcat+Memcached负载均衡集群服务搭建

    操作系统:CentOS6.5  本文档主要讲解,如何在CentOS6.5下搭建Nginx+Tomcat+Memcached负载均衡集群服务器,Nginx负责负载均衡,Tomcat负责实际服务,Memc ...

  6. nginx+tomcat+redis负载均衡及session共享

    概述 本文档是用来详细描述 nginx+tomcat+redis负载均衡实现session共享 所需软件及下载地址 软件名称 下载地址 功能说明 Nginx-v1.6.0 http://nginx.o ...

  7. 使用 Nginx + Tomcat 搭建负载均衡

    负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用性. 负载均衡,英文名称为Load Balance, ...

  8. Nginx+Tomcat 实现负载均衡 ,动静分离集群部署

    Nginx + Tomcat 实现负载均衡,动静分离集群部署 1.Nginx实现负载均衡原理 2.Nginx配置反向代理主要参数 3.实验 1.Nginx实现负载均衡原理: Nginx服务器作为前端, ...

  9. Nginx+Tomcat搭建负载均衡

    一.       工具 nginx-1.8.0 apache-tomcat-6.0.33 二.    目标 实现高性能负载均衡的Tomcat集群: 三.    步骤 1.首先下载Nginx,要下载稳定 ...

随机推荐

  1. loj 2719 「NOI2018」冒泡排序 - 组合数学

    题目传送门 传送门 题目大意 (相信大家都知道) 显然要考虑一个排列$p$合法的充要条件. 考虑这样一个构造$p$的过程.设排列$p^{-1}_{i}$满足$p_{p^{-1}_i} = i$. 初始 ...

  2. Spring Boot Cache使用与整合

    Spring 提供了对缓存功能的抽象:即允许绑定不同的缓存解决方案(如Caffeine.Ehcache等),但本身不直接提供缓存功能的实现.它支持注解方式使用缓存,非常方便. SpringBoot在a ...

  3. Appium+python自动化(七)- 初识琵琶女Appium(千呼万唤始出来,犹抱琵琶半遮面)- 上(超详解)

    简介 “千呼万唤始出来,犹抱琵琶半遮面”,经过前边的各项准备工作,终于才把appium这位琵琶女请出来.那么下边就由宏哥给各位看官.小伙伴们和童鞋们来引荐这位美女(帅哥).这一篇主要是对前边的内容做一 ...

  4. Pandas操作excel

    读取excel:Pandas库read_excel()参数详解 pandas.read_excel(io,sheet_name = 0,header = 0,names = None,index_co ...

  5. 【03】Jenkins:SonarQube

    写在前面的话 SonarQube 这个服务有些人熟悉,有些人陌生.对于我们这样的运维人员,我们需要了解的是,SonarQube 是一个代码质量管理平台,懂得怎么安装配置,这其实就差不多足够了.我们在 ...

  6. 记第一次使用NET CORE 2.2 完成的DEMO部署在LINUX并且上线

    .NET CORE 这么久了一直没有成功打通过,今天花了点儿时间做了一个小DEMO,首次完成并且部署上线.记录一下. DEMO中只是测试了一下从MSSQL中获取数据,并且显示在页面上,涉及到了数据库连 ...

  7. c# winform devexpress TreeList过滤和绑定

    /// <summary> /// 模糊查询 /// </summary> /// <param name="str"></param&g ...

  8. PIE SDK影像快速拼接

    1.算法功能简介 快速拼接是对若干幅互为邻接的遥感数字图像拼在一起,构成一幅整体影像的技术过程.PIE支持快速拼接算法功能的执行,下面对快速拼接算法功能进行介绍. 2.算法功能实现说明 2.1 实现步 ...

  9. Servlet处理(jQuery)Ajax请求

    1. jQuery     jQuery是一个JavaScript函数库,极大的简化了JavaScript编程,很容易学习.jQuery是目前最流行的开源js框架,并且提供了大量的扩展. 2. Aja ...

  10. 安装MySQL-8.0.13

    安装1.去官网下载对应的MySQL版本http://downloads.mysql.com/archives/community/ 2.将下载下来的MySQL解压到你想要安装的目录下安装MySQL8. ...