docker篇-(docker安装nginx,反向代理,ssl,负载均衡)

查找nginx镜像

docker search nginx

拉取nginx镜像

# 这里我拉去的是nginx:alpine镜像,是nginx最小镜像
docker pull nginx:alpine

运行镜像

docker run --name nginx -p 80:80 -d nginx:alpine

查看运行效果

在这里插入图片描述

nginx实现反向代理tomcat,基于负载均衡

编写tomcat的docker-compose.yml文件
tomcat镜像基于之前文章构建的tomcat,可以自己修改,并且文件在tomcat目录下创建的
博客地址: docker篇-(docker安装tomcat2-基于Dockerfile构建tomcat)
如下
在这里插入图片描述

version: '3'
services:
  tomcat: 
    build: .
    image: tomcat:9.0.44-alpine
    container_name: tomcat
    hostname: www.tomcat.com.cn #设置hostname
    networks:
      tomcat:
        ipv4_address: "10.10.10.80" #固定ip
networks: #配置网卡
  tomcat: #网卡名称
    driver: bridge #网卡驱动
    ipam:
      driver: default
      config:
      - subnet: 10.10.0.0/16 #配置子网

编写nginx的docker-compose.yml文件
所在目录为nginx,结构如下
在这里插入图片描述

version: '3'
services:
  nginx:
    image: nginx:alpine
    container_name: nginx
    #network_mode: host 模式启动,但是不能与networks并存,因此这里不适用
    ports:
    - 80:80
    networks:
    - nginx
    volumes:
    - ./conf.d:/etc/nginx/conf.d #挂载当前目录下的conf.d目录到nginx里面
networks:
  nginx:
    external:
      name: tomcat_tomcat #这里使用tomcat创建的网卡,docker-compose创建的网卡名为service.name_network_name,所以tomcat的网卡为tomcat_tomcat

在conf.d目录下面创建tomcat.conf配置文件

upstream tomcat { #负载均衡模块,如果有多个tomcat,在里面添加多个server即可
  ip_hash; #使用ip哈希方式负载均衡,默认使用的是轮训方式
  server 10.10.10.80:8080 weight=1;  #weight 为权重
  #server 10.10.10.81:8080; 
  #server 10.10.10.82:8080; 
}

server {
    listen       80;
    server_name  localhost;
    location / {
        proxy_set_header X-Real-IP $remote_addr;                       # 将客户端真实ip存放到X-Real-IP这个header里面,由于这里是没有使用host模式启动nginx,获取的会是宿主机的ip
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   # 每经过一个反向代理,就会把反向代理IP存放在X-Forwarded-For里
        proxy_pass http://tomcat; #请求到upstream模块,实现负载均衡
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

启动tomcat

#启动tomcat的docker-compose.yml
docker-compose -f /root/tomcat/docker-compose.yml up -d
#启动nginx的docker-compose.yml
docker-compose -f /root/nginx/docker-compose.yml up -d

访问页面
在这里插入图片描述
查看nginx日志
在这里插入图片描述
实现nginx反向代理到tomcat,要实现后台应用的集群部署时,如tomcat可能扩容到10台,就可以使用此方式实现负载均衡。
如果负载均衡的tomat项目依赖了session,则需要在tomat里面加上session共享的功能,如使用redis,或者tomcat自带的等等,当然,我的建议是使用token进行接口数据交互,就不用在维护状态

nginx配置ssl

这里生成证书我使用的是cfssl进行生成,下载地址 https://pkg.cfssl.org/或者执行以下脚本进行安装

wget -O /usr/local/sbin/certinfo https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 && chmod +x /usr/local/sbin/certinfo
wget -O /usr/local/sbin/cfssl https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 && chmod +x /usr/local/sbin/cfssl
wget -O /usr/local/sbin/cfssljson https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 && chmod +x /usr/local/sbin/cfssljson

在nginx同级目录执行以下命令创建对应目录
这里为tomcat配置一个域名为 www.tomat.com.cn

mkdir -p ssl/tomcat && cd ssl/tomcat

编写ca-config.json文件,用于证书生成的配置文件

{
    "signing": {
        "default": {
            "expiry": "876000h"
        },
        "profiles": {
            "tomcat-server": {
                "expiry": "876000h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth"
                ]
            }
        }
    }
}

编写ca-csr.json(用于生成CA证书和私钥( 根证书和私钥))
CN为域名

{
    "CN": "www.tomcat.com.cn",
    "hosts": [
    ],
    "key": {
        "algo": "ecdsa",
        "size": 256
    },
    "names": [
        {
            "C": "US",
            "L": "CA",
            "ST": "San Francisco"
        }
    ]
}

生成ca根证书

cfssl gencert -initca ca-csr.json | cfssljson -bare ca

编写tomcat-server-csr.json文件(用于生成服务器证书和私钥文件)

{
    "CN": "www.tomcat.com.cn",
    "hosts": [
    ],
    "key": {
        "algo": "ecdsa",
        "size": 256
    },
    "names": [
        {
            "C": "US",
            "L": "CA",
            "ST": "San Francisco"
        }
    ]
}

执行命令,生成服务器证书和私钥文件

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=tomcat-server tomcat-server-csr.json | cfssljson -bare tomcat-server

目录如下
在这里插入图片描述

编写nginx的docker-compose.yml和conf.d下面的tomcat.conf文件,配置ssl
docker-compose.yml如下,添加ssl目录挂载

version: '3'
services:
  nginx:
    image: nginx:alpine
    container_name: nginx
    ports:
    - 80:80
    - 443:443
    networks:
    - nginx
    volumes:
    - ./conf.d:/etc/nginx/conf.d
    - ./ssl:/opt/ssl
networks:
  nginx:
    external:
      name: tomcat_tomcat

tomcat.conf如下,添加nginx的ssl配置

upstream tomcat {
  ip_hash;
  server 10.10.10.80:8080 weight=1;
}

server {
    listen       443 ssl http2 default_server;
    server_name  www.tomcat.com.cn [::]:443 ssl http2 default_server;
    ssl_certificate     /opt/ssl/tomcat/tomcat-server.pem;  # pem文件的路径
    ssl_certificate_key  /opt/ssl/tomcat/tomcat-server-key.pem; # key文件的路径
    ssl_session_timeout  5m;    #缓存有效期
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;    #加密算法
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;    #安全链接可选的加密协议
    ssl_prefer_server_ciphers on;   #使用服务器端的首选算法
   
    location / {
        proxy_set_header X-Real-IP $remote_addr;                       # 将客户端真实ip存放到X-Real-IP这个header里面,由于这里是没有使用host模式启动nginx,获取的会是宿主机的ip
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   # 每经过一个反向代理,就会把反向代理IP存放在X-Forwarded-For里
        proxy_pass http://tomcat;
    }

  
}

server {
    listen       80;
    server_name  localhost;
    location / {
    	proxy_set_header X-Real-IP $remote_addr;                       # 将客户端真实ip存放到X-Real-IP这个header里面,由于这里是没有使用host模式启动nginx,获取的会是宿主机的ip
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   # 每经过一个反向代理,就会把反向代理IP存放在X-Forwarded-For里
        proxy_pass http://tomcat;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

启动nginx

docker-compose -f /root/nginx/docker-compose.yml up -d

访问页面效果如下,实现nginx https协议配置
在这里插入图片描述
我的nginx目录如下
在这里插入图片描述

要在 Docker Compose 中安装配置 Nginx 来实现 HTTPS 和反向代理,你可以按照以下步骤进行操作: 1. 首先,在你的项目目录下创建一个名为 `docker-compose.yml` 的文件,并添加以下内容: ```yaml version: '3' services: nginx: image: nginx ports: - 80:80 - 443:443 volumes: - ./nginx.conf:/etc/nginx/nginx.conf - ./certs:/etc/nginx/certs ``` 这将创建一个名为 `nginx` 的服务,并将容器的 80 和 443 端口映射到主机的相应端口。同时,我们将挂载一个自定义的 `nginx.conf` 配置文件和一个名为 `certs` 的文件夹用于存放 SSL/TLS 证书。 2. 在项目目录下创建一个名为 `nginx.conf` 的配置文件,并添加以下内容作为示例: ```nginx events {} http { server { listen 80; server_name example.com; location / { proxy_pass http://backend:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } server { listen 443 ssl; server_name example.com; ssl_certificate /etc/nginx/certs/cert.pem; ssl_certificate_key /etc/nginx/certs/key.pem; location / { proxy_pass http://backend:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } } ``` 这是一个简单的 Nginx 配置文件示例,其中设置了一个 HTTP 的反向代理和一个 HTTPS 的反向代理。你需要将 `example.com` 替换为你的域名,并将 SSL/TLS 证书文件 `cert.pem` 和 `key.pem` 放入 `certs` 文件夹中。 3. 在你的项目目录下创建一个名为 `certs` 的文件夹,并将正确的 SSL/TLS 证书文件放入其中。 4. 现在,你可以运行 `docker-compose up -d` 命令启动容器。 这样,Nginx 将通过反向代理将所有对于 `example.com` 的请求转发到名为 `backend` 的服务的 8000 端口上。同时,通过 HTTPS 访问时,Nginx 使用了提供的 SSL/TLS 证书来进行加密通信。 请注意,上述步骤只是一个示例,你可能需要根据你的实际需求进行修改和调整。希望这能帮到你!如果有任何进一步的问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值