Я обнаружил проблему с тем, как PBS работает за обратным прокси. Я пробовал Apache, Caddy и Nginx. С Nginx всё «просто работает», а с остальными перестаёт работать, когда PBS пытается инициировать апгрейд до своего протокола. В итоге PBS отвечает, что заголовок Upgrade отсутствует. Я провёл расследование с Apache, собрал логи с Caddy и немного пролистал код Caddy. После изучения стандартов Connection/Upgrade, кажется, что PBS забывает отправлять заголовок Connection для запуска апгрейда, хотя стандарт этого требует. Caddy, судя по всему, требует наличие этого заголовка, они следуют стандарту, и, по всей видимости, Apache тоже так делает, судя по их ответам. При этом Nginx, похоже, не придерживается этого стандарта, и поэтому с ним всё работает. Интересно, действительно ли PBS при попытке сделать апгрейд на proxmox-backup-protocol-v1 или proxmox-backup-reader-protocol-v1 не отправляет заголовок Connection? Если да, то это баг или особенность? Я бы сказал, баг, потому что это нарушение стандарта. Ещё один момент, не связанный с PBS, но полезный для тех, кто столкнётся с этой проблемой: модуль прокси в Apache не поддерживает имена Upgrade длиннее 16 символов. Обойти это можно с помощью rewrite-модуля.
[РЕШЕНО] Не соответствует стандарту HTTP, Proxmox Backup Server
14.06.2023 12:49:00
|
|
|
14.02.2024 17:16:00
Я не хочу возвращаться к nginx. Я сделал другой обходной путь только для этой проблемы, но он уникален для моего развертывания. Очень хочется, чтобы это исправили в PBS.
|
|
|
26.07.2023 22:49:00
Есть какие-нибудь новости по этому поводу? У меня такая же проблема с PBS за обратным прокси traefik.
|
|
|
27.07.2023 09:01:00
Привет, да, есть соответствующий баг-репорт. Можешь предоставить запрошенные там детали?
|
|
|
28.07.2023 12:36:00
Я создал отдельную тему для этого, не хочу захватывать эту.
|
|
|
17.12.2023 18:29:00
У меня такая же проблема. В отчёте об ошибке указано, что проблема исправлена, но у меня всё ещё не работает.
(headers) { header -x-powered-by header -server header Content-Security-Policy "frame-ancestors 'self'; upgrade-insecure-requests;" header X-LB-Server {system.hostname} header X-LB-Requested-Host {host} header X-LB-Server {system.hostname} header X-Forwarded-Port {http.request.port} header X-Forwarded-For {http.request.header.CF-Connecting-IP} header X-Real-IP {http.request.header.CF-Connecting-IP} encode zstd gzip } pbs.x.dev, pbs.x.net { import cloudflare import headers reverse_proxy transport http { tls_insecure_skip_verify } } } Я использую последнюю сборку PBS. Очень хотелось бы получить решение, которое будет работать с моей архитектурой, используя туннель Cloudflare. |
|
|
17.12.2023 18:30:00
@McTwist, ты решил проблему с Caddy?
|
|
|
17.12.2023 19:11:00
Я добавил эти два заголовка, и теперь появляется другая ошибка: sync group vm/101 failed - invalid protocol name reverse_proxy
|
|
|
28.02.2024 17:41:00
Не могу поверить, но у меня получилось. Это, наверное, одно из самых мучительных путешествий по отладке, в которых мне доводилось участвовать, но, тем не менее, я много чему научился. Хотел бы кое-что уточнить: Caddy действительно получает заголовок Upgrade (это видно в логах отладки), но не передаёт его дальше внутри, если в ответе сервера нет заголовка Connection. К моему удивлению, это нигде явно не прописано в RFC по HTTP/1.1 и HTTP/2 — только в примерах. В описании патча, который я только что отправил на рассылку, всё подробно объяснено. Если интересно, можете почитать здесь:
|
|
|
Читают тему