===== Traefik ===== ==== Аутентификация ==== Пароль нужно кодировать с помощью htpasswd (в т. ч. в Докере), под Windows с помощью [[https://github.com/shoenig/bcrypt-tool|bcrypt-tool]]. # Установить htpasswd apk add apache2-utils # Пользователь user, пароль 234567 htpasswd -nb user 234567 user:$apr1$jSrLMlYc$SqO40GakivRBqlS/5UsXL0 # Docker docker run --rm httpd:alpine htpasswd -nb user 234567 :!: В пароле необходимо удваивать знак доллара! # В docker-compose.yml - "traefik.http.routers.service.middlewares=service-auth" - "traefik.http.middlewares.service-auth.basicauth.users=user:$$apr1$$jSrLMlYc$$SqO40GakivRBqlS/5UsXL0" https://doc.traefik.io/traefik/v2.0/middlewares/basicauth/ ==== Проблема проброса на путь после домена ==== Когда нужно пробрасывать, например, http://host.local/conv -> container:5800 и при этом писать правила так: handbrake: image: jlesage/handbrake labels: - "traefik.http.routers.handbrake.rule=Host(`host.local`) && PathPrefix(`/conv`)" - "traefik.http.middlewares.handbrake-stripprefix.stripprefix.prefixes=/conv" - "traefik.http.routers.handbrake.middlewares=handbrake-stripprefix" , то если обращаться на адрес **http://host.local/conv,** будет открываться лишь часть html, остальное грузиться не будет. Нормально работает, если в конце поставить слэш, а именно - **http://host.local/conv/.** Чтобы сделать удобно, нужно написать так: labels: - "traefik.http.routers.handbrake.rule=host(`host.local`) && PathPrefix(`/conv`)" - "traefik.http.routers.handbrake.middlewares=handbrake-redirectregex, handbrake-replacepathregex" - "traefik.http.middlewares.handbrake-replacepathregex.replacepathregex.regex=^/conv/(.*)" - "traefik.http.middlewares.handbrake-replacepathregex.replacepathregex.replacement=/$$1" - "traefik.http.middlewares.handbrake-redirectregex.redirectregex.regex=^(.*)/conv$$" - "traefik.http.middlewares.handbrake-redirectregex.redirectregex.replacement=$$1/conv/" В этом случае слэш будет добавляться. https://stackoverflow.com/questions/41637806/routing-paths-with-traefik Для Nextcloud пример посложнее: labels: - "traefik.http.routers.nextcloud.rule=Host(`host.local`) && PathPrefix(`/cloud`)" - "traefik.http.routers.nextcloud.middlewares=nextcloud-redirectregex, nextcloud-caldav, nextcloud-replacepath" - "traefik.http.middlewares.nextcloud-replacepath.stripprefix.prefixes=/cloud" - "traefik.http.middlewares.nextcloud-caldav.redirectregex.permanent=true" - "traefik.http.middlewares.nextcloud-caldav.redirectregex.regex=^http://(.*)/.well-known/(card|cal)dav" - "traefik.http.middlewares.nextcloud-caldav.redirectregex.replacement=http://$${1}/remote.php/dav/" - "traefik.http.middlewares.nextcloud-redirectregex.redirectregex.regex=^(.*)/cloud$$" - "traefik.http.middlewares.nextcloud-redirectregex.redirectregex.replacement=$$1/cloud/" https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/reverse_proxy_configuration.html С поддоменом таких проблем нет - просто пишешь labels: - "traefik.http.routers.handbrake.rule=host(`conv.host.local`)"