带有 nginx 容器的 Traefik
Traefik with nginx container
我花了很多时间,但没有找到任何解决方案。
我已经设置了 Traefik 和 nginx 容器,这是我的 docker-compose.yml
version: '3'
networks:
proxy:
external: true
internal:
external: false
services:
mysql:
image: 'mysql:5.7'
environment:
MYSQL_ROOT_PASSWORD: null
networks:
- internal
labels:
- traefik.enable=false
adminer:
image: 'adminer:latest'
labels:
- traefik.backend=adminer
- 'traefik.frontend.rule=Host:db-admin.xxxx.xyz'
- traefik.docker.network=proxy
- traefik.port=8080
networks:
- internal
- proxy
depends_on:
- mysql
portainer:
image: portainer/portainer
networks:
- internal
- proxy
labels:
- "traefik.frontend.rule=Host:portainer.xxxx.xyz"
- "traefik.port=9000"
- "traefik.backend=portainer"
- traefik.docker.network=proxy
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
restart: unless-stopped
Nginx-Pro:
image: nginx:latest
container_name: Nginx-Pro
labels:
- traefik.backend=Nginx-Pro
- traefik.frontend.rule=Host:new.xxxx.fr
- traefik.docker.network=proxy
- "traefik.port=80"
- "traefix.port=443"
- "traefik.frontend.entryPoints=http"
networks:
- internal
- proxy
depends_on:
- mysql
volumes:
- /var/www/nginx-pro/:/var/www/
- /etc/nginx/nginx-pro/:/etc/nginx
所以我还在 /etc/nginx/sites-enabled 的服务器上设置了 vhost
我还将日志添加到 traefik conf 但没有任何问题。
这是我的虚拟主机配置:
server {
listen *:80;
root /var/www/new.xxx.fr;
# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;
server_name new.xxx.fr www.new.xxx.fr;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ /index.php?$args;
}
location ~ /\.ht {
deny all;
}
}
问题是我总是收到来自 Traefik 的 Bad Gateway
消息。
您需要添加 traefik.frontend.passHostHeader
以便 nginx 可以将 Host
header 与 server_name
.
匹配
但是由于此 nginx 仅适用于您已经与 traefik.frontend.rule=Host:new.xxxx.fr
匹配的一个域,您也可以将 server_name
排除在 nginx 虚拟主机配置之外并使用默认配置。
同时删除 "traefix.port=443"
因为你只在 traefik 和 nginx 之间使用 http,你想要的是 "traefik.frontend.entryPoints=http,https"
,你也可以添加 "traefik.frontend.headers.SSLRedirect=true"
总是将 http 重定向到 https。
我花了很多时间,但没有找到任何解决方案。 我已经设置了 Traefik 和 nginx 容器,这是我的 docker-compose.yml
version: '3'
networks:
proxy:
external: true
internal:
external: false
services:
mysql:
image: 'mysql:5.7'
environment:
MYSQL_ROOT_PASSWORD: null
networks:
- internal
labels:
- traefik.enable=false
adminer:
image: 'adminer:latest'
labels:
- traefik.backend=adminer
- 'traefik.frontend.rule=Host:db-admin.xxxx.xyz'
- traefik.docker.network=proxy
- traefik.port=8080
networks:
- internal
- proxy
depends_on:
- mysql
portainer:
image: portainer/portainer
networks:
- internal
- proxy
labels:
- "traefik.frontend.rule=Host:portainer.xxxx.xyz"
- "traefik.port=9000"
- "traefik.backend=portainer"
- traefik.docker.network=proxy
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
restart: unless-stopped
Nginx-Pro:
image: nginx:latest
container_name: Nginx-Pro
labels:
- traefik.backend=Nginx-Pro
- traefik.frontend.rule=Host:new.xxxx.fr
- traefik.docker.network=proxy
- "traefik.port=80"
- "traefix.port=443"
- "traefik.frontend.entryPoints=http"
networks:
- internal
- proxy
depends_on:
- mysql
volumes:
- /var/www/nginx-pro/:/var/www/
- /etc/nginx/nginx-pro/:/etc/nginx
所以我还在 /etc/nginx/sites-enabled 的服务器上设置了 vhost 我还将日志添加到 traefik conf 但没有任何问题。
这是我的虚拟主机配置:
server {
listen *:80;
root /var/www/new.xxx.fr;
# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;
server_name new.xxx.fr www.new.xxx.fr;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ /index.php?$args;
}
location ~ /\.ht {
deny all;
}
}
问题是我总是收到来自 Traefik 的 Bad Gateway
消息。
您需要添加 traefik.frontend.passHostHeader
以便 nginx 可以将 Host
header 与 server_name
.
但是由于此 nginx 仅适用于您已经与 traefik.frontend.rule=Host:new.xxxx.fr
匹配的一个域,您也可以将 server_name
排除在 nginx 虚拟主机配置之外并使用默认配置。
同时删除 "traefix.port=443"
因为你只在 traefik 和 nginx 之间使用 http,你想要的是 "traefik.frontend.entryPoints=http,https"
,你也可以添加 "traefik.frontend.headers.SSLRedirect=true"
总是将 http 重定向到 https。