使用基本身份验证的Apache代理/重写

时间:2014-10-29 13:51:03

标签: apache mod-rewrite proxy mod-proxy

我正在尝试配置和apache服务器充当代理并遇到一些问题。

我想要的是能够从家用计算机向服务器上运行的apache发出请求,并让apache将此请求转发到最终目的地。

请求必须看起来好像来自服务器,并且必须携带从我的家用计算机传递到apache服务器的基本身份验证标头。

我尝试过使用mod_proxy,只是:

ServerName proxy.server.com

ProxyRequests On
ProxyVia Block
RewriteEngine on

<Proxy *>
    Order deny,allow
    Allow from all
    SetEnv proxy-chain-auth
    SetEnv proxy-sendcl
</Proxy>

ProxyPass / http://api.finaldestination.com/v1/
ProxyPassReverse / http://api.finaldestination.com/v1/

这很好,除了最终目标服务器正在重定向我(302个响应)所以我假设它正在接受请求URL是proxy.server.com而不是api.finaldestination.com的事实。

我也尝试过RewriteRule

RewriteRule ^something/(.*)$ http://api.finaldestination.com/v1/something/$1 [P]

但是现在基本身份验证标头没有通过,我从api.finaldestination.com获得了404

我显然遗漏了一些明显的东西 - 有人可以帮忙吗?

我正在使用Ubuntu 12.04

1 个答案:

答案 0 :(得分:1)

以下是您可以尝试的方法[因为您有ubuntu 12.04步骤适用于此操作系统]

运行以下命令安装build-essential软件包:

aptitude install -y build-essential

然后照顾其他模块

aptitude install -y libapache2-mod-proxy-html libxml2-dev

激活模块

a2enmod proxy
a2enmod proxy_http
a2enmod proxy_ajp
a2enmod rewrite
a2enmod deflate
a2enmod headers
a2enmod proxy_balancer
a2enmod proxy_connect
a2enmod proxy_html

现在编辑文件/etc/apache2/sites-enabled/000-default.conf

使用gedit或vi编辑器编辑文件

<VirtualHost *:*>
    ProxyPreserveHost On
ProxyPass / http://api.finaldestination.com/v1/
ProxyPassReverse / http://api.finaldestination.com/v1/

    ServerName localhost
</VirtualHost>

确保其他所有内容都是默认的,从开始。

现在,代理服务器的所有内容都将传递给&#34; http://api.finaldestination.com/v1/&#34;这是你的意图。

现在在302重定向中你需要在&#34; http://api.finaldestination.com/v1/&#34;上进行PUT Rewrite ON网络服务器 &安培;你可以在.htaccess文件上管理的其他一切

一旦你通过这个,那么你可以为代理身份验证部分 通过

<Location />
    AuthType Basic
    ...
</Location>

根据您计划使用的身份验证,身份验证可能会有所不同

您可以参考示例 Here

在某些情况下,我使用了以下内容

<VirtualHost *:80>
    ServerName domainname.com

    ProxyRequests Off
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    ProxyErrorOverride On
    ProxyPass   /   http://target-url/
    ProxyPassReverse   /   http://target-url/

    <Location />
        AuthType basic
        AuthBasicAuthoritative Off
        SetEnv proxy-chain-auth On
        Order allow,deny
        Allow from all
    </Location>
</VirtualHost>