具有多个 NGINX vHosts 的 Traefik docker 容器

具有多个 NGINX vHosts 的 Traefik docker 容器

我想在 Docker 容器中托管多个 Web 服务,所有这些服务都应该使用单独的 NGINX 容器。例如,我仅将 Nextcloud 与 PHP 一起使用,或者稍后我想托管 GitLab。这两个服务应该使用相同的NGINX 容器。因此我为 Nextcloud 配置了一个 vHost 并添加了一些 Traefik 参数。

现在如果我打开网站https://cloud.XXX.de我从 Traefik 收到“404 未找到”。

这是我的docker-compose.yml

version: '3'
services:
  traefik:
    #restart: always
    image: traefik:1.7.12-alpine
    container_name: traefik
    ports:
      - '80:80'
      - '443:443'
    networks:
      - web
    volumes:
      - './data/traefik/traefik.toml:/etc/traefik/traefik.toml'
      - '/var/run/docker.sock:/var/run/docker.sock:ro'
      - '/etc/letsencrypt/live/XXX.de-0001/fullchain.pem:/etc/traefik/fullchain.pem:ro'
      - '/etc/letsencrypt/live/XXX.de-0001/privkey.pem:/etc/traefik/privkey.pem:ro'

  nginx:
    #restart: always
    image: nginx:1.17-alpine
    container_name: nginx
    labels:
      - 'traefik.frontend.passHostHeader'
      - 'traefik.frontend.entryPoints=http,https'
    volumes:
      - './data/nextcloud:/var/www/html/nextcloud:ro'
      - './data/nginx/conf.d:/etc/nginx/conf.d:ro'
      - './data/nginx/nginx.conf:/etc/nginx/nginx.conf:ro'
      - './data/nginx/logs:/var/log/nginx'
    depends_on:
      - nextcloud

  nextcloud:
    #restart: always
    image: nextcloud:16.0.1-fpm-alpine
    container_name: nextcloud
    ports:
      - '9000:9000'
    volumes:
      - './data/nextcloud:/var/www/html/'
      - './data/nextcloud_logs:/var/log'

networks:
  web:
    external: true

traefik.toml:

[entryPoints]
  [entryPoints.http]
  address = ":80"
    [entryPoints.http.redirect]
    entryPoint = "https"

  [entryPoints.https]
  address = ":443"
    [entryPoints.https.tls]
      [[entryPoints.https.tls.certificates]]
      certFile = "/etc/traefik/fullchain.pem"
      keyFile = "/etc/traefik/privkey.pem"

[docker]
domain = "XXX.de"

nextcloud.conf(NGINX 虚拟主机):

upstream php-handler {
    server nextcloud:9000;
}

server {
    listen 80;
    listen [::]:80;
    server_name cloud.XXX.de;

    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;
    add_header Referrer-Policy no-referrer;

    fastcgi_hide_header X-Powered-By;

    root /var/www/html/nextcloud/;

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    location = /.well-known/carddav {
      return 301 $scheme://$host/remote.php/dav;
    }
    location = /.well-known/caldav {
      return 301 $scheme://$host/remote.php/dav;
    }

    client_max_body_size 10G;
    fastcgi_buffers 64 4K;

    gzip on;
    gzip_vary on;
    gzip_comp_level 4;
    gzip_min_length 256;
    gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
    gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;

    location / {
        rewrite ^ /index.php$request_uri;
    }

    location ~ ^\/(?:build|tests|config|lib|3rdparty|templates|data)\/ {
        deny all;
    }
    location ~ ^\/(?:\.|autotest|occ|issue|indie|db_|console) {
        deny all;
    }

    location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+)\.php(?:$|\/) {
        fastcgi_split_path_info ^(.+?\.php)(\/.*|)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param HTTPS on;
        #Avoid sending the security headers twice
        fastcgi_param modHeadersAvailable true;
        fastcgi_param front_controller_active true;
        fastcgi_pass php-handler;
        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
    }

    location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/) {
        try_files $uri/ =404;
        index index.php;
    }

    location ~ \.(?:css|js|woff2?|svg|gif)$ {
        try_files $uri /index.php$request_uri;
        add_header Cache-Control "public, max-age=15778463";
        add_header X-Content-Type-Options nosniff;
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Robots-Tag none;
        add_header X-Download-Options noopen;
        add_header X-Permitted-Cross-Domain-Policies none;
        add_header Referrer-Policy no-referrer;

        access_log off;
    }

    location ~ \.(?:png|html|ttf|ico|jpg|jpeg)$ {
        try_files $uri /index.php$request_uri;
        access_log off;
    }
}

我希望你能帮助我并祝我有美好的一天!

相关内容