Я пытаюсь настроить обратный прокси с Apache 2.4.Collabora «Неизвестный ресурс» из-за Apache mod_rewrite proxy unescaping% 2F slashes
Похоже, я не могу использовать ужасный mod_proxy
напрямую, так как он не поддерживает WebSockets (если вручную настроить для каждого URL), так что я должен использовать ужасный ужасный mod_rewrite
вместо этого.
Моя конфигурация выглядит следующим образом до сих пор:
<VirtualHost *:80>
ServerName collabora.example.com
RewriteEngine on
RewriteCond %{HTTP:Upgrade} =websocket
RewriteRule ^(/.*)?$ wss://collabora-backend$1 [P]
RewriteCond %{HTTP:Upgrade} !=websocket
RewriteCond %{REQUEST_URI} !^/.well-known/acme-challenge/?
RewriteRule ^(/.*)?$ https://collabora-backend$1 [P]
</VirtualHost>
Одно приложение, которое я пытаюсь запустить (в horrible³ Collabora Online in combination with NextCloud) будет пытаться открыть WebSockets для URL-адресов, как это: ws://collabora.example.com/lool/https%253A%252F%252Fcloud.example.com%252Fapps%252Frichdocuments%252Fwopi%252Ffiles%252F51040%3Faccess_token%3DABCDEF%26permission%3Dedit/ws
. К сожалению, с приведенной выше конфигурацией эти URL-адреса прибудут в бэкэнд со всеми %25
деталями, декодированными до %
(и другие также): ws://collabora.example.com/lool/https%3A%2F%2Fcloud.example.com%2Fapps%2Frichdocuments%2Fwopi%2Ffiles%2F51040?access_token=ABCDEF&permission=edit/ws
.
Collabora сообщит сообщения об ошибках, как это:
wsd-00026-0195 0:01:27.448231 [ client_ws_0003 ] ERR Unknown resource: /lool//ws/lool/https%253A%252F%252Fowncloud.mydomain.fr%252Findex.php%252Fapps%252Frichdocuments%252Fwopi%252Ffiles%252F5%3Faccess_token=R...c&permission=edit/ws| LOOLWSD.cpp:1154
и соединения WebSocket потерпит неудачу с 400 Bad Request
ошибки в браузере.
Установка AllowEncodedSlashes
на On
или NoDecode
не изменяет это. (Насколько я понимаю, это влияет только на величину PATH_INFO
.)
Чтение через RewriteRule
flags, то [B]
флаг, кажется, говорить о чем-то связано с моей проблемой. Там говорится: «mod_rewrite должен удалять URL-адреса перед их сопоставлением» (я предполагаю, что единственной причиной этого является максимизация досады), поэтому флаг [B]
снова удалит их после сопоставления. Это, конечно же, не работает в этом случае и избежит всех косых черт, даже тех, которые не ускользнули раньше: "ws://collabora.example.com%2Flool%2Fhttps%253A%252F%252Fcloud.example.com%252Fapps%252Frichdocuments%252Fwopi%252Ffiles%252F51040%3Faccess_token%3DABCDEF%26permission%3Dedit%2Fws"
Есть ли способ исправить эту проблему или это тот момент, когда я, наконец, должен получить избавиться от Apache навсегда?
Спасибо большое. Я не знал, что вы можете ссылаться на «RewriteCond's».Мне удалось заставить его работать с некоторыми твиками, см. Мой собственный ответ. – cdauth