服务器部署‌Traefik 实现子级域名路由服务(对外子域名80,路由对内大端口)

发布于:2024-10-12 ⋅ 阅读:(108) ⋅ 点赞:(0)


本文档只是为了留档方便以后工作运维,或者给同事分享文档内容比较简陋命令也不是特别全,不适合小白观看,如有不懂可以私信,上班期间都是在得

前言,领导让我调研在线发布得技术选型
白话文就是,子级域名 a.xx.com,b.xx.com 访问可以对应到服务器得某个服务例如20001,20002端口得服务
第一时间我想到得是nginx进行调用转发,但是就会出现一个问题没办法动态更新转发配置,重启再快也需要时间。
后面经过某群友推荐得‌Traefik实现了目的

1.‌Traefik安装

使用docker-compse进行安装
创建一个treafik.yml

version: '3.7'

services:
  traefik:
    image: traefik:v2.10
    container_name: traefik   
    command:
      - "--entrypoints.http.address=:80"
      - "--entrypoints.https.address=:443"
      - "--api=true"
      - "--api.insecure=true"
      - "--api.dashboard=true"
      - "--api.debug=false"
      - "--ping=true"
      - "--providers.docker=true"
      - "--providers.docker.watch=true"
      - "--providers.docker.exposedbydefault=false"
      - "--providers.docker.endpoint=unix:///var/run/docker.sock"
      - "--providers.docker.swarmMode=false"
      - "--providers.docker.useBindPortIP=false"
      - "--providers.docker.network=traefik"
      - "--providers.file=true"
      - "--providers.file.watch=true"
      - "--providers.file.directory=/etc/traefik/config"
      - "--providers.file.debugloggeneratedtemplate=true"
    ports:
      - "80:80"                                  # HTTP
      - "443:443"                                # HTTPS
      - "9999:8080"                             # Web UI 端口(通过 --api.insecure=true 启用)
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"  # 允许 Traefik 访问 Docker API
      - "/home/docker/traefik/config:/etc/traefik/config"       # 这样 Traefik 可以监听 Docker 事件
    networks:
      - traefik  # 加入 traefik 网络
networks:
  traefik:
    driver: bridge  # 使用桥接网络
#启动traefik
docker-compose -f traefik.yml  up -d

启动traefik

2.启动nginx配置路由

nginx配置

user  nginx;
worker_processes  auto;

 
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    client_max_body_size 10000M;  # 设置文件上传大小限制为20MB
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    underscores_in_headers on;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

 
    sendfile        on;
    keepalive_timeout  65;
server {
		listen       20002;
          server_name www.b.xx.com;
		if ($request_method !~ ^(GET|POST|DELETE|PUT)$) {
            return 403;
		}
		charset utf-8;
	
		location / {
            root  /usr/share/nginx/html/dist;
          index index.html index.htm;
			try_files $uri $uri/ /index.html;
			client_max_body_size 5000m;
			client_body_buffer_size 500m; 
		}
	 
    }
   
}

还是使用docker-compse进行安装
创建一个nginx.yml

version: '3.8'   

services:
  nginx2:
    image: nginx:latest  # 使用最新的 Nginx 镜像
    container_name: nginx_2  # 容器名称
    ports:
      - "20002:20002" 
    labels:
      - "traefik.enable=true"  # 启用 Traefik 处理该服务
      - "traefik.http.routers.nginx2.rule=Host(`www.b.xx.com`)"  # 路由规则
      - "traefik.http.routers.nginx2.entrypoints=http"  # 指定入口点
      - "traefik.http.services.nginx2.loadbalancer.server.port=20002"  # 指定 Nginx 服务端口
    volumes:
      - /home/nginx/02/html:/usr/share/nginx/html  # 映射前端文件
      - /home/nginx/02/conf/nginx.conf:/etc/nginx/nginx.conf  # 映射 Nginx 配置文件
      - /home/nginx/02/logs:/var/log/nginx  # 映射日志目录
    restart: always  # 容器崩溃后自动重启
    networks:
    - traefik  # 加入 traefik 网络

networks:
 traefik:
   external: false  # 不使用外部网络,而是使用本地定义的网络
#启动nginx
docker-compose -f nginx.yml  up -d

启动nginx

我们看一下效果
效果对比图

二级域名访问正常,但是一级域名访问404
我们这里在多启动一个试试
启动命令

多个效果对比图

完美实现多级域名访问路由服务器nginx

如果点赞多,评论多会更新详细教程,待补充。


网站公告

今日签到

点亮在社区的每一天
去签到