Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия |
service:traefik [06.10.2020 13:11] – [Проблема проброса на путь после домена] viacheslav | service:traefik [11.08.2024 16:22] (текущий) – [Аутентификация] viacheslav |
---|
| ===== Traefik ===== |
| ==== Аутентификация ==== |
| Пароль нужно кодировать с помощью htpasswd (в т. ч. в Докере), под Windows с помощью [[https://github.com/shoenig/bcrypt-tool|bcrypt-tool]]. |
| <code bash> |
| # Установить 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 |
| </code> |
| :!: В пароле необходимо удваивать знак доллара! |
| |
| <code yaml> |
| # В docker-compose.yml |
| - "traefik.http.routers.service.middlewares=service-auth" |
| - "traefik.http.middlewares.service-auth.basicauth.users=user:$$apr1$$jSrLMlYc$$SqO40GakivRBqlS/5UsXL0" |
| </code> |
| |
| https://doc.traefik.io/traefik/v2.0/middlewares/basicauth/ |
| |
| |
| ==== Проблема проброса на путь после домена ==== |
| Когда нужно пробрасывать, например, |
| <code> |
| http://host.local/conv -> container:5800 |
| </code> |
| и при этом писать правила так: |
| <code yaml> |
| 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" |
| </code> |
| , то если обращаться на адрес **http://host.local/conv,** будет открываться лишь часть html, остальное грузиться не будет. Нормально работает, если в конце поставить слэш, а именно - **http://host.local/conv/.** |
| |
| Чтобы сделать удобно, нужно написать так: |
| <code yaml> |
| 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/" |
| </code> |
| В этом случае слэш будет добавляться. https://stackoverflow.com/questions/41637806/routing-paths-with-traefik |
| |
| Для Nextcloud пример посложнее: |
| <code yaml> |
| 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/" |
| </code> |
| https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/reverse_proxy_configuration.html |
| |
| С поддоменом таких проблем нет - просто пишешь |
| <code yaml> |
| labels: |
| - "traefik.http.routers.handbrake.rule=host(`conv.host.local`)" |
| </code> |