Я использую httpd mod_proxy для настройки прокси-сервера CORS, похожего по духу на thingproxy или crossorigin.me. Я дошел до

SSLProxyEngine on
<LocationMatch "^/corsproxy/(https?)://([^/]+)/(.*)$">
    ProxyPassMatch "$1://$2/$3"
    Header set Access-Control-Allow-Origin "https://my-site.org/"
    Header unset X-Frame-Options
</LocationMatch>

Это работает, так как вы можете посетить http://myhost/corsproxy/http://example.com/somepage и он успешно загружается. Проблема заключается в том, что перенаправления по-прежнему указывают непосредственно на example.com , а не на эквивалентный URL-адрес прокси.

Вот тут- то и появляется ProxyPassMatch , но я не верю, что он способен сопоставлять регулярные выражения с целевым URL, поэтому я не могу извлечь протокол, имя хоста и путь, как я это делал в LocationMatch . Есть ли обходной путь для этого? Может быть, я могу что-то сделать с mod_rewrite?

Прежде чем появятся комментарии: да, я знаю о последствиях безопасности, и да, я хотел бы попробовать сделать это полностью внутри httpd, вместо того, чтобы запускать инструмент, подобный тому, с которым я связался в начале вопроса, так как они вводят внешние зависимости (в обоих случаях NodeJS).

1 ответ1

0

Я не уверен, что еще обычно делает ProxyPassReverse , но только для перенаправлений я смог использовать директиву Header edit :

Header edit Location ^http://(.+)$ "/corsproxy/http://$1"
Header edit Location ^https://(.+)$ "/corsproxy/https://$1"

Я играл с использованием одной строки вместо двух, но столкнулся с каким-то странным поведением, и его не стоило выслеживать. Я все еще хотел бы знать, есть ли другие крайние случаи, которые я мог бы не покрыть этим подходом.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .