以docker的方式创建nginx并在其上部署vue打包项目、tomcat负载均衡,持续更新

本文详细介绍了如何使用Nginx配置文件实现前端Vue项目与后端Tomcat集群间的负载均衡。主要内容包括Nginx配置文件解析、静态资源路径设置、负载均衡配置及Docker容器编排等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先逼逼一顿我自己需要记住的东西

A:目的是一个mysql服务、三个tomcat服务,一个nginx,同时在nginx中部署vue打包后的工程
B:因为本文的重点是nginx,所以有关于mysql、tomcat的dockerfile以及docker-compose.yml文件不会出现在本文中,如果有需要了解,则去看我其他的文章
C.本文会贴出nginx.的配置文件
D:本文重点是作为自己的笔记,so 可能连贯性会比较差,有一些东西不会说的那个细致

进入正文

A: 文字说明:

1.nginx的docker镜像中有三个主要的文件或目录,分别是 /etc/nginx/nginx.conf /etc/nginx/conf.d/defaul.conf /usr/share/nginx/html

2.nginx.conf 和default.conf都是配置文件,默认的nginx.conf文件中会有有一句 includ /etc/nginx/conf.d/default.conf, 我这里是把这句话去掉了,把所有的个人配置都写在了 nginx.conf 中

3.vue打包后的文件夹放在了 上述的 /user/share/nginx/html 下边了,我这里的文件夹名叫 netAppointmentCarExamSys ,所以在 配置文件中写静态文件的地址时写的是:

location / {
                root   /usr/share/nginx/html/netAppointmentCarExamSys;
                index  index.html index.htm;
        }

4.然后使用ip:80/访问时就可以访问到netAppointmentCarExamSys文件夹下的index.html页面了

5.我的后端项目名为 :rideHailing,就是说前端访问后端时会带着这个名称再调用接口,所以所有的接口都会访问 /rideHailing/,所以负载均衡的localtion配置就变成了

location ^~/rideHailing/ {
             proxy_pass http://mytomcat;
             proxy_redirect off;
             proxy_set_header Host $http_host;
             proxy_set_header X-Real-IP $remote_addr;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_next_upstream http_502 http_504 error timeout invalid_header;

             #proxy_connect_timeout 30;
             #proxy_send_timeout 60;
             #proxy_read_timeout 60;

             #proxy_buffering on;
             #proxy_buffer_size 32k;
             #proxy_buffers 4 128k;
        }

6.至于location后边的^~是啥意思,就自己去搜吧,搜nginx配置文件中location用法就行了

7.nginx使用的端口为80,就是说访问静态文件和负载均衡都用的80端口,所以在同一个server{}中配置了多个location

8.upstream 是指定了业务服务集群的名称,我这里写的是 mytomcat,所以下方 location中proxy_pass 指向的也是 mytomcat

好,下方是nginx.conf的内容

nginx.conf内容


user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;



events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #include /etc/nginx/conf.d/*.conf;

    #gzip  on;

    upstream mytomcat {
                 server 192.168.127.31:8077;
                 server 192.168.127.31:8078;
                 server 192.168.127.31:8079;
    }
    server {
             listen       80;
             server_name 192.168.127.31;
    #        root         /usr/share/nginx/html;
    #        index index.html;

        location / {
                root   /usr/share/nginx/html/netAppointmentCarExamSys;
                index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   /usr/share/nginx/html;
        }
        location ^~/rideHailing/ {
             proxy_pass http://mytomcat;
             proxy_redirect off;
             proxy_set_header Host $http_host;
             proxy_set_header X-Real-IP $remote_addr;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_next_upstream http_502 http_504 error timeout invalid_header;

             #proxy_connect_timeout 30;
             #proxy_send_timeout 60;
             #proxy_read_timeout 60;

             #proxy_buffering on;
             #proxy_buffer_size 32k;
             #proxy_buffers 4 128k;
        }
    }
}

docker-compose.yml

创建容器时需要 映射端口、挂载文件,docker run -p -v --name 。。。。。 很显然这种方式很慢,所以使用docker-compose.yml 文件是很方便的,我这里对nginx挂载的文件目录一共三个,分别是nginx.conf,conf.d,还有html, 最后在docker-compose.yml目录使用docker-compose up -d 就可以了
version: "3.2"
services:
  mysql1:
    networks:
      - wyc
    build:
      context: ./mysql
      dockerfile: ./dockerfile
    restart: always
    image: wyc_mysql
    container_name: wyc_mysql_01
    ports:
      - "3306:3306"
    volumes:
      - "/home/fd/wycplus/tomcat/dockerfile/mysql/conf.d/:/etc/mysql/conf.d/"
      - "/home/fd/wycplus/tomcat/dockerfile/mysql/data/:/var/lib/mysql/"
      - "/home/fd/wycplus/tomcat/dockerfile/mysql/log/:/var/log/mysql/"
      - "/home/fd/wycplus/tomcat/dockerfile/mysql/init.d/:/docker-entrypoint-initdb.d/"
    environment:
      #      - MYSQL_USER= 'root'
      #      - MYSQL_PASS= 'root'
      MYSQL_ROOT_PASSWORD: root
      MYSQL_ROOT_HOSE: '%'
      MYSQL_DATABASE: wyc_test
      TZ: Asia/Shanghai

  tomcat1:
    build:
      context: ./
      dockerfile: ./dockerfile
    image: wyc_tomcat
    restart: always
    container_name: wyc_tomcat_01
    ports:
      - "8077:8077"
    volumes:
      - "/home/fd/wycplus/tomcat/dockerfile/tomcat1/conf/:/usr/local/tomcat/conf/"
      - "/home/fd/wycplus/tomcat/dockerfile/tomcat1/webapps:/usr/local/tomcat/webapps"
      - "/home/fd/wycplus/tomcat/dockerfile/tomcat1/logs:/usr/local/tomcat/logs"
    networks:
      - wyc


  tomcat2:
#    build:
#      context: ./
#      dockerfile: ./dockerfile
    image: wyc_tomcat
    restart: always
    container_name: wyc_tomcat_02
    ports:
      - "8078:8077"
    volumes:
      - "/home/fd/wycplus/tomcat/dockerfile/tomcat2/conf/:/usr/local/tomcat/conf/"
      - "/home/fd/wycplus/tomcat/dockerfile/tomcat2/webapps:/usr/local/tomcat/webapps"
      - "/home/fd/wycplus/tomcat/dockerfile/tomcat2/logs:/usr/local/tomcat/logs"
    networks:
      - wyc

  tomcat3:
#    build:
#      context: ./
#      dockerfile: ./dockerfile
    image: wyc_tomcat
    restart: always
    container_name: wyc_tomcat_03
    ports:
      - "8079:8077"
    volumes:
      - "/home/fd/wycplus/tomcat/dockerfile/tomcat3/conf/:/usr/local/tomcat/conf/"
      - "/home/fd/wycplus/tomcat/dockerfile/tomcat3/webapps:/usr/local/tomcat/webapps"
      - "/home/fd/wycplus/tomcat/dockerfile/tomcat3/logs:/usr/local/tomcat/logs"
    networks:
      - wyc
  nginx:
    build:
      context: ./nginx
      dockerfile: ./dockerfile
    image: wyc_nginx
    container_name: wyc_nginx_01
    ports:
      - "80:80"
    volumes:
      - "/home/fd/wycplus/tomcat/dockerfile/nginx/nginx.conf:/etc/nginx/nginx.conf"
      - "/home/fd/wycplus/tomcat/dockerfile/nginx/html:/usr/share/nginx/html"
      - "/home/fd/wycplus/tomcat/dockerfile/nginx/conf.d:/etc/nginx/conf.d "
    depends_on:
      - tomcat1
      - tomcat2
      - tomcat3
networks:
   wyc:

nginx 的dockerfile

我写的比较简单,也够用
FROM nginx
EXPOSE 80
#VOLUME "/etc/nginx/nginx.conf"
#VOLUME "/var/run/nginx.pid"
VOLUME "/etc/nginx/conf.d"
VOLUME "/usr/share/nginx/html"

其实里面的volume没必要定义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值