Apache Server Forward Proxy: как перенаправить на пользовательскую страницу?

Apache Server Forward Proxy: как перенаправить на пользовательскую страницу?

На сервере Apache (Xampp) я создал прямой прокси-сервер для фильтрации брандмауэра, который работает хорошо, но я не понимаю, как использовать RewriteRule для перенаправления запрещенного URL-адреса на пользовательскую страницу с ошибкой.

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

В примере ниже я поместил только ту часть, которая не работает (у меня есть другие правила RewriteRule для разрешенных URL):

  Listen 192.168.0.100:3128
<VirtualHost 192.168.0.100:3128>
  
  ServerName 192.168.0.100:3128  
  ProxyRequests On  
  ProxyVia On
  
  <Proxy *>
     
     # 1) If url is allowed (this part works well):
       ... some RewriteCond & RewriteRule ...
     
     # 2) If url is not allowed by some RewriteCond:
       RewriteRule ^ https://192.168.0.100/firewall/firewall_deny.html [R=302,L]
     OR
       RewriteRule ^ https://192.168.0.100/firewall/firewall_deny.html [P,L]
  
  </Proxy>
   
</VirtualHost>

Когда URL разрешен (случай 1), прокси работает хорошо, и Chrome получает страницу запрошенного веб-сайта. Но в случае URL, который я забанил (случай 2), ответа от прокси нет.

Я перепробовал множество различных найденных мной синтаксисов, но браузер Chrome так и не получил никакого ответа от моего сервера, а просто вывел страницу с ошибкой: «Этот сайт недоступен» с ошибкой «ERR_TUNNEL_CONNECTION_FAILED».

Только в случае прямого прокси-сервера (я не использую обратный прокси-сервер) возможно ли отправить обратно клиенту пользовательский HTML-файл (или его URL)?

Спасибо за любую помощь.

Редактировать 23/10:

Этот небольшой прокси-сервер работает хорошо, но единственное, чего я не знаю, так это как отправлять клиенту страницу с ошибкой, если URL-адрес запрещен.

Вот почему я спрашивал, можно ли использовать RewriteRule, используемый в <Proxy *> для авторизации или нет соединения, для перенаправления на страницу с ошибкой, как мы можем сделать в обычной конфигурации (не прокси). Что-то вроде:

RewriteRule ^ https://192.168.0.100/path/to/firewall/firewall_deny.html [R=302,L]

Судя по всему, перенаправление выполнено, поскольку в Fiddler я вижу страницу перенаправления 302 с новым URL-адресом, но Chrome, похоже, ее не получает.

Я также пробовал такие вещи, как:

Redirect permanent path/to/firewall/

Но это, похоже, тоже не работает, в этой конфигурации прямого прокси. Может быть, вам придется как-то переписать заголовок или что-то еще, чтобы отправить обратно в Chrome URL страницы с ошибкой, потому что он проходит через туннель прокси.

В настоящее время я пытаюсь использовать другие решения, найденные на ServerDefault, такие как ExtFilterDefine (mod_ext_filter.so) или Substitute (mod_substitute.so), но пока безуспешно.

Связанный контент