标签: mod-proxy

代理通行证不起作用

我正在尝试让 ProxyPass 在我的 OpenSUSE 13.1 安装上工作。

我试过了:

a2enmod proxy
a2enmod proxy_http
a2enmod proxy_connect
systemctl restart apache2
systemctl reload apache2
Run Code Online (Sandbox Code Playgroud)

(所有组合语句都无济于事)。

我一遍又一遍地得到同样的错误:

SERVER:/etc/apache2 # apache2ctl start -f /etc/apache2/httpd-proxy.conf
AH00526: Syntax error on line 4 of /etc/apache2/httpd-proxy.conf:
Invalid command 'ProxyPass', perhaps misspelled or defined by a module not included in the server configuration
Run Code Online (Sandbox Code Playgroud)

httpd-proxy.conf 看起来像:

<VirtualHost *:80>
    DocumentRoot /srv/www/subsite
    ServerName www.site.com/subsite
    ProxyPass /subsite/ http://localhost:81
    ProxyPassReverse /subsite/ http://localhost:81
</Virtualhost>
Run Code Online (Sandbox Code Playgroud)

有谁知道如何让这个 ProxyPass 语句起作用?

proxy mod-proxy proxypass apache-2.2

36
推荐指数
1
解决办法
7万
查看次数

如何排除 Apache Mod_proxy 的 URL?

我们使用 mod_proxy 模块作为负载均衡器配置了两个 Apache 服务器作为前端和 4 个 tomcat 服务器作为后端。现在,我们想从 mod_proxy 负载均衡器中排除单个 tomcat url。有什么办法或规则可以排除吗?

代理平衡器设置:

<Proxy balancer://backend-cluster1>
   BalancerMember http://10.0.0.1:8080 loadfactor=1 route=test1 retry=10
   BalancerMember http://10.0.0.2:8080 loadfactor=1 route=test2 retry=10
</Proxy>
Run Code Online (Sandbox Code Playgroud)

linux mod-rewrite tomcat mod-proxy apache-2.2

34
推荐指数
3
解决办法
5万
查看次数

Apache2 代理超时

我有 Apache2 与 PHP + PHP-FPM 配置根据:

http://wiki.apache.org/httpd/PHP-FPM

我正在编写一个脚本,需要很长时间才能在内部 Vhost 上执行,但一直超时,如果脚本在 30 秒内执行,一切都会完美运行。

我的 apache 日志告诉我:

[Wed Apr 17 21:57:23.075175 2013] [proxy_fcgi:error] [pid 9263:tid 140530454267648] (70007)The timeout specified has expired: [client 58.169.202.172:49017] AH01075: Error dispatching request to :, referer:
Run Code Online (Sandbox Code Playgroud)

尝试运行脚本时,我在503 Service Unavailable执行时间刚好 30 秒后得到了一个。从逻辑上讲,这意味着我有一个超时指令或设置为 30 秒,但我在 Vhost 的配置中有这些:

Timeout 600
<IfModule proxy_module>
    ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9001/home/pyrokinetiq/scripts/$1 timeout=600
    ProxyTimeout 600
</IfModule>
Run Code Online (Sandbox Code Playgroud)

(php-fpm 对我来说在端口 9001 上运行)

我也试过把TimeoutProxyTimeout放在httpd.conf没有区别的地方。

似乎有另一个特定于 的超时设置mod_proxy_fcgi,但我找不到它。我从官方 tarball 安装了 Apache2 httpd,似乎没有一个 …

php mod-proxy httpd.conf php-fpm apache-2.2

25
推荐指数
3
解决办法
8万
查看次数

使用mod_proxy对SOAP服务做反向代理时出现间歇性错误

使用 mod_proxy 作为 SOAP Web 服务的反向代理时,我每隔几分钟就会收到此错误。每秒可能有 3 或 4 个请求,所以我们谈论的是每千个有此错误的请求中的 1 或 2 个。

[Tue Nov 23 11:44:14 2010] [error] [client 172.16.1.31] (20014)Internal error: proxy: error reading status line from remote server soap1.server:8888
[Tue Nov 23 11:44:14 2010] [error] [client 172.16.1.31] proxy: Error reading from remote server returned by /someapp/path/to/web/service
Run Code Online (Sandbox Code Playgroud)

这会导致请求失败。如果我让客户端在不使用代理的情况下直接连接到soap服务器,则成功率为100%,因此问题似乎出在代理上

配置看起来像这样。目的是在主服务器不可用时切换到备份服务器:

<Proxy balancer://apicluster>  
BalancerMember http://soap1.server:8888 lbset=0 
BalancerMember http://soap2.server:8888 lbset=1 
</Proxy>  

ProxyPass /someapp balancer://apicluster/someapp 
ProxyPassReverse / balancer://apicluster/someapp 
Run Code Online (Sandbox Code Playgroud)

有没有人遇到过这个问题并找到了解决方法?错误报告中有一些提及,但没有解决方案。唯一可能不寻常的是客户端请求可能为 100MB 或更大,因此该请求可能比您预期的 SOAP 调用花费的时间长一点。

mod-proxy apache-2.2

21
推荐指数
2
解决办法
6万
查看次数

Proxypass 指令是否需要 ProxyPassReverse 指令?

是否所有 ProxyPass 指令都需要 ProxyPassReverse 指令?

ProxyPass / http://foo.example.com:8080/  
ProxyPassReverse / http://www.example.com/
Run Code Online (Sandbox Code Playgroud)

我看到了这个片段,并了解到所有流量都foo.example.com被代理到 foo.example.com:8080。第二行有什么作用?

mod-proxy apache-2.2

20
推荐指数
1
解决办法
2万
查看次数

Apache 代理不适用于本地主机端口

我在端口 80 上运行 Apache 2.2.15,并希望在本地主机端口 8983 上代理 servlet 引擎。我在另一台服务器上运行设置,但已转移到 CentOS 6 机器。它不适用于新机器。我的虚拟主机配置:

代理请求关闭

<代理*>
   订单拒绝,允许
   所有人都允许
</代理>

ProxyPass / http://localhost:8983/
ProxyPassReverse / http://localhost:8983/

如果我使用浏览器并直接访问它(并且不通过 Apache 代理),我可以访问端口 8983,但如果我访问/通过 Apache 服务器,则无法连接到它。

我可以将代理的内容更改为http://slashdot.org并且 Slashdot 成功代理(所以我知道它通常能够代理)。

我在 Apache 中打开调试登录,这是事务:

[Sun Apr 22 16:47:04 2012] [debug] mod_proxy_http.c(56): proxy: HTTP: canonicalising URL //localhost:8983/
[Sun Apr 22 16:47:04 2012] [debug] proxy_util.c(1506): [client 184.39.79.7] 代理:http: found worker http://localhost:8983/ for http://localhost:8983/
[Sun Apr 22 16:47:04 2012] [debug] mod_proxy.c(998):运行方案 http 处理程序(尝试 0)
[Sun Apr 22 16:47:04 2012] [debug] …

mod-proxy apache-2.2

17
推荐指数
2
解决办法
6万
查看次数

如何为通过 mod 代理的请求启用日志记录

有没有办法记录通过 mod 代理的请求?我需要一种方法来调试我的配置,因为我似乎没有到达我应该去的地方。我需要以下信息:

  • 传入请求的标头
  • 什么被发送到代理目标

也许是一个相关的问题:有没有办法去除一些标题?我尝试了以下方法:

ProxyPass         /proxy/other http://not.under.my.control/
<Location /proxy/other>
   ProxyPassReverse /
   RequestHeader unset Authorization
</Location>
Run Code Online (Sandbox Code Playgroud)

我真的不知道这是否可以,因为我什么也没看到。

debug logging mod-proxy apache-2.2

16
推荐指数
4
解决办法
9万
查看次数

反向代理中的Apache URL重写

我在 Karaf 托管的应用程序前部署 Apache(Apache 和 Karaf 在不同的服务器上)。我希望 Apache 作为反向代理运行并隐藏部分 URL。

直接从应用服务器获取应用登录页面的 URL 是http://app-server:8181/jellyfish. 页面由在 Karaf 中运行的 Jetty 实例提供服务。当然,这种行为通常会被防火墙阻止,除了反向代理服务器。

在关闭防火墙的情况下,如果您点击此 URL,则 Jetty 会加载登录页面。浏览器的地址栏正确更改为http://app-server:8181/jellyfish/login?0,一切正常。

我想要的是http://web-server(即从根)映射到应用程序服务器上的 Jetty,应用程序的名称 ( jellyfish) 被抑制。例如,浏览器将更改为显示http://web-server/login?0在地址栏中,并且所有后续 URL 和内容都将使用网络服务器的域提供服务,而不会出现jellyfish混乱。

我可以使用以下配置(代码段)让 Apache 作为简单的反向代理运行:-

ProxyPass /jellyfish http://app-server:8181/jellyfish
ProxyPassReverse / http://app-server:8181/
Run Code Online (Sandbox Code Playgroud)

...但这需要浏览器的 URL 包含jellyfish并转到根 URL ( http://web-server) 会给出 404 Not Found。

我花了很多时间尝试使用mod_rewrite和不使用它的[P]标志来解决这个问题,但没有成功。然后我尝试了该ProxyPassMatch指令,但我似乎也无法完全正确。

这是当前配置,已加载到/etc/apache2/sites-available/Web 服务器上。请注意,有一个本地托管的图像目录。我还保留了mod_rewrite 代理漏洞利用保护,并抑制了一些mod_security会产生误报的规则。

<VirtualHost *:80> …
Run Code Online (Sandbox Code Playgroud)

mod-rewrite web-server reverse-proxy mod-proxy apache-2.2

15
推荐指数
1
解决办法
8万
查看次数

通过代理服务所有请求*除了*特定的

我的 httpd.conf 中有以下内容

<VirtualHost *:80>
    ServerName foo.org
    ServerAlias www.foo.org

    <Proxy *>
        Options FollowSymLinks MultiViews
        Order allow,deny
        Allow from all
        AllowOverride All
    </Proxy>

    ProxyPass        / http://127.0.0.1:5012/
    ProxyPassReverse / http://127.0.0.1:5012/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

这适用于所有对http://foo.org 的请求都使用不同的 Web 服务器从端口 5012 提供服务。但是,我只想通过 Apache 从端口 80提供http://foo.org/lib服务。我该怎么做?将以下行添加到 conf 没有帮助

Alias /lib /path/to/lib

<Directory "/path/to/lib">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>
Run Code Online (Sandbox Code Playgroud)

mod-proxy apache-2.2

14
推荐指数
1
解决办法
1万
查看次数

帮助我了解如何使用ProxyPass

更新:在玩弄下面的两个答案后,我添加了一个修改后的问题。

你好呀,

如果您正在阅读本文,您可能熟悉 Apache 的 mod_proxy 及其 ProxyPass 功能。像许多其他人一样,我有一个可以从内部网络外部访问的应用程序的问题,但该应用程序本身可以访问不同机器上的其他内部应用程序,当您通过此设置进行远程访问时,事情变得不稳定。

所以,我的设置非常简单,我有:

机器 #1 启用了远程访问,我通过主机名访问它,它会吐出运行在它上面的 PHP 应用程序。

Machine #2 是一个运行 Django 的新应用程序,它使用完全不同的后端(甚至是 auth),它托管在单独的机器上。在我们的 Intranet 中,我们通过一个简单的命名主机名访问它,该主机名基本上链接到内部 192.168.0.101 ip。

我尝试使用 ProxyPass 来设置它,例如,传递到 /new 会将其发送到新应用程序:

ProxyPass /new http://192.168.0.101/

这种工作方式,它将请求发送到另一个应用程序,但它中断了,因为我的 Django 应用程序想要重定向到 /auth/login/,它立即无法识别。如果我自己将 url 修改为 foo.net/new/auth/login,我会得到我的登录页面,但正如您所猜测的那样,在整个浏览过程中这样做并不方便。

那么我怎样才能让 ProxyPass 像我想要的那样工作呢?我是否需要对 Apache 做一些事情,以便它总是在另一个应用程序中的 url 之前写入 /new ,或者这是我应该在我的 Django 应用程序中修改的内容吗?

任何提示和指针也将不胜感激。谢谢你的时间

proxy mod-proxy django proxypass apache-2.2

13
推荐指数
1
解决办法
7万
查看次数