В моем приложении я использую следующее правило перезаписи:
RewriteRule ^/ajax(.*) http://api.externalserver.com/$1 [P,QSA,L]
Теперь проблема в том, что моя корпоративная сеть требует, чтобы я использовал прокси-сервер HTTP для внешних подключений к Интернету.
Чтобы проиллюстрировать, это не работает:
curl -v http://api.externalserver.com/login
Но это работает:
curl -v -x 11.22.11.22:8585 http://api.externalserver.com/login
Как я могу заставить Apache использовать корпоративный прокси для внешних интернет-запросов?
Я думаю, вы захотите включить mod_proxy_http
, и установите:
ProxyRemote * http://11.22.11.22:8585
где-нибудь в вашей конфигурации виртуального хоста.
Вы можете установить прокси-сервер SQUID в прозрачном режиме для проксирования всего трафика, идущего с локального компьютера в Интернет.
Для этого сначала добавьте правило iptables
iptables -t nat -A OUTPUT -p tcp --dport 5555 -j DNAT --to 127.0.0.1:3128
это перенаправит все исходящие HTTP-соединения на локальный squid. Затем настройте squid в соответствии с этим руководство и дополнительно настроить
cache_peer 11.22.11.22 parent 8585 0 no-query default
never_direct allow all
Вот и все. Весь ваш исходящий трафик на порт 80 будет проходить через прокси вашей организации.
Вы пробовали HTTP-туннелирование через прокси-туннель или штопор?
Вам необходимо настроить виртуальный хост для вашего Apache и использовать его в качестве удаленного прокси.
Возможно, адаптация может вам помочь: http://dag.wieers.com/howto/ssh-http-tunneling/
Я думаю, что вы ищете mod_proxy и, в частности, mod_proxy_http:
После установки ProxyRemote
и перезапущен httpd
, если вы получили сообщение «[error] (13) Permission denied: proxy: HTTP: try to connect to failed», то вам также необходимо выполнить следующее:
setsebool -P httpd_can_network_connect=1