服务器部署Traefik 实现子级域名路由服务(对外子域名80,路由对内大端口)
文章目录
- 1.Traefik安装
- 2.启动nginx配置路由
本文档只是为了留档方便以后工作运维,或者给同事分享文档内容比较简陋命令也不是特别全,不适合小白观看,如有不懂可以私信,上班期间都是在得
前言,领导让我调研在线发布得技术选型
白话文就是,子级域名 a.xx.com,b.xx.com 访问可以对应到服务器得某个服务例如20001,20002端口得服务
第一时间我想到得是nginx进行调用转发,但是就会出现一个问题没办法动态更新转发配置,重启再快也需要时间。
后面经过某群友推荐得Traefik实现了目的
1.Traefik安装
使用docker-compse进行安装
创建一个treafik.yml
version: '3.7'services:traefik:image: traefik:v2.10container_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
2.启动nginx配置路由
nginx配置
user nginx;
worker_processes auto;pid /var/run/nginx.pid;events {worker_connections 1024;
}http {client_max_body_size 10000M; # 设置文件上传大小限制为20MBinclude /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
我们看一下效果
二级域名访问正常,但是一级域名访问404
我们这里在多启动一个试试
完美实现多级域名访问路由服务器nginx
如果点赞多,评论多会更新详细教程,待补充。