我想在 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;
}
}
我希望你能帮助我并祝我有美好的一天!