【问题标题】:Apache proxy/rewrite with basic auth使用基本身份验证的 Apache 代理/重写
【发布时间】:2014-12-25 06:16:34
【问题描述】:

我正在尝试将 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

【问题讨论】:

  • 您是否取消了 apache.conf 或 httpd.conf 文件中代理 mod 行的加载模块部分的注释
  • 您需要在启动时加载模块,然后在虚拟主机块中输入正确的条目。
  • 我使用了 a2enmod 代理和 a2enmod 重写 - 我的 httpd.conf 只是一个包含上述内容的 VirtualHost 块。
  • 您使用的是哪个操作系统平台??
  • 我使用的是 ubuntu 12.04

标签: apache mod-rewrite proxy mod-proxy


【解决方案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>

确保其他所有内容都保持默认设置。

现在进入代理服务器的所有内容都将传递给“http://api.finaldestination.com/v1/”,这是您的意图。

现在在 302 重定向中,您需要在“http://api.finaldestination.com/v1/”网络服务器上启用重写 以及您可以在 .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>

【讨论】:

  • 谢谢你 - 这工作......在一定程度上。似乎最终目的地是看到原始请求来自它正在阻止的国家/地区。需要明确的是,apache 代理可以发出成功的请求(通过 curl),但是当我通过代理从我的机器发送请求时,我被阻止并且响应显示为 INVALID_COUNTRY。所以下一个问题是,我怎样才能阻止原始请求到达最终目的地的任何提示?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-28
  • 2012-10-17
  • 2011-05-24
相关资源
最近更新 更多