Начиная с версии 3.6.4 Traefik не работает просмотр задач в Proxmox Backup Server (400 Bad request)

В веб интерфейсе PBS при просмотре информации по таске получаю ошибку.

Traefik возвращает 400 Bad Request без проксирования запроса в PBS

А в debug логах traefik наблюдается следующее сообщение

traefik            | 2026-01-03T13:51:00Z DBG github.com/traefik/traefik/v3/pkg/server/router/deny.go:52 > Rejecting request because it contains encoded character %5C in the URL path: /api2/json/nodes/pbs/tasks/UPID%3Apbs%3A000000CF%3A00206C38%3A00000060%3A695876DA%3Abackup%3Abackups%5Cx3act-183%3Aroot%40pam%3A/status

Интересно, почему именно в debug режиме его можно получить? :thinking:

Начал раскапывать и нашел вот такую штуку

Вот пример ID таски UPID:pbs:000000CF:00206C38:00000069:6958EC8D:reader:backups\x3ahost-krom\x2dpc-69579019:client@pbs:, в процессе HTTP запроса \ заменяется на %5C
А вот этот символ запрещен в URL начиная с traefik 4.6.4

Лечится добавлением соответствующего исключения в entrypoint глобально (как добавить для конкретного маршрута я пока не понял)

entryPoints:
  websecure:
    address: :443
    http:
      encodedCharacters:
        allowEncodedBackSlash: true
      tls: {}

После чего лог выглядит так:

Полный список символов ниже (из документации)

Encoded Character Character Config option to allow the encoded character
%2f or %2F / (slash) entryPoints.<name>
.http.encodedCharacters
.allowEncodedSlash
%5c or %5C \ (backslash) entryPoints.<name>.
.http.encodedCharacters
.allowEncodedBackSlash
%00 NULL (null character) entryPoints.<name>.
.http.encodedCharacters
.allowEncodedNullCharacter
%3b or %3B ; (semicolon) entryPoints.<name>.
.http.encodedCharacters
.allowEncodedSemicolon
%25 % (percent) entryPoints<name>.
.http.encodedCharacters
.allowEncodedPercent
%3f or %3F ? (question mark) entryPoints.<name>.
.http.encodedCharacters
.allowEncodedQuestionMark
%23 # (hash) entryPoints.<name>.
.http.encodedCharacters
.allowEncodedHash
4 лайка

Вышла версия 3.6.7 с откатом этого функционала

Encoded Character Character Config options Default value
%2f or %2F / (slash) entryPoints.<name>
.http.encodedCharacters
.allowEncodedSlash
true
%5c or %5C \ (backslash) entryPoints.<name>.
.http.encodedCharacters
.allowEncodedBackSlash
true
%00 NULL (null character) entryPoints.<name>.
.http.encodedCharacters
.allowEncodedNullCharacter
true
%3b or %3B ; (semicolon) entryPoints.<name>.
.http.encodedCharacters
.allowEncodedSemicolon
true
%25 % (percent) entryPoints.<name>.
.http.encodedCharacters
.allowEncodedPercent
true
%3f or %3F ? (question mark) entryPoints.<name>.
.http.encodedCharacters
.allowEncodedQuestionMark
true
%23 # (hash) entryPoints.<name>.
.http.encodedCharacters
.allowEncodedHash
true

Теперь блокировка по-умолчанию выключена, но ее можно включить принудительно, например, так

entryPoints:
  websecure:
    address: :443
    http:
      encodedCharacters:
        allowEncodedBackSlash: false
2 лайка