标签: mod-proxy

帮助我了解如何使用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万
查看次数

ProxyPassReverse 指令有什么用

来自 apache.org 的定义说:

该指令允许 Apache httpd 调整 HTTP 重定向响应的 Location、Content-Location 和 URI 标头中的 URL。当 Apache httpd 用作反向代理(或网关)以避免绕过反向代理时,这是必不可少的,因为后端服务器上的 HTTP 重定向位于反向代理之后。

只有上面特别提到的 HTTP 响应头会被重写。Apache httpd 不会重写其他响应头,默认情况下也不会重写 HTML 页面内的 URL 引用。这意味着如果代理内容包含绝对 URL 引用,它们将绕过代理。要重写 HTML 内容以匹配代理,您必须加载并启用 mod_proxy_html。

path 是本地虚拟路径的名称;url 是远程服务器的部分 URL。这些参数的使用方式与 ProxyPass 指令相同。

有人可以解释一下它是如何工作的。一般来说,这个指令有什么作用?

mod-proxy apache-2.4

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

Apache httpd 错误“代理:ap_get_scoreboard_lb”与 ProxyPass

我设置了 apache 来代理 tomcat,但是当我定位页面时出现以下错误。我有时会得到一个空白页或 503:

[错误]

[Mon Dec 03 04:58:16 2012] [error] proxy: ap_get_scoreboard_lb(2) failed in child 29611 for worker proxy:reverse
[Mon Dec 03 04:58:16 2012] [error] proxy: ap_get_scoreboard_lb(1) failed in child 29611 for worker https://localhost:8443/
[Mon Dec 03 04:58:16 2012] [error] proxy: ap_get_scoreboard_lb(0) failed in child 29611 for worker http://localhost:8080/
Run Code Online (Sandbox Code Playgroud)

我在 vm 上配置了两个 vhost,如下所示:

[http 主机]

<VirtualHost *:80>
  ServerName www.mysite.net
  ServerAlias mysite.net

  ProxyRequests Off
  ProxyPreserveHost On

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

  ProxyPass / http://localhost:8080/ retry=0
  ProxyPassReverse …
Run Code Online (Sandbox Code Playgroud)

tomcat proxy reverse-proxy mod-proxy apache-2.2

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

Apache mod_proxy 与 mod_rewrite

使用 mod_proxy 和 mod_rewrite 有什么区别?

我需要通过 tomcat 发送某些 url 模式,它在同一台主机上运行,​​但在端口 8080 下。我知道这是 mod_proxy 的东西,但我想知道为什么我不能只使用 mod_rewrite,或者有什么区别是?

可能必须使用反向代理,并且在管道中时它会得到处理?

谢谢。

mod-rewrite mod-proxy apache-2.2

11
推荐指数
2
解决办法
9096
查看次数

设置一个基本的 mod_proxy 虚拟主机

我正在尝试设置一个基本的虚拟主机,以将所有对 test.local 的请求代理到我在 127.0.0.1:8080 上运行的 WEBrick 服务器,同时将所有对 localhost 的请求发送到 /var/www 中的静态文件。我正在运行 Ubuntu 10.04。

我已经安装了 libapache2-mod-proxy-html 并且我已经使用 a2enmod 代理启用了该模块。我也启用了我的虚拟主机。然而,每当我去 test.local 我总是得到一个神秘的 500 服务器错误,我所有的日志都告诉我:

[Thu Mar 03 01:43:10 2011] [warn] proxy: No protocol handler was valid for the URL /. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.
Run Code Online (Sandbox Code Playgroud)

这是我的虚拟主机:

<VirtualHost test.local:80>
    LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
    ServerAdmin webmaster@localhost
    ServerName test.local
    ProxyPreserveHost On

    # prevents this folder from being proxied
    ProxyPass /static …
Run Code Online (Sandbox Code Playgroud)

ubuntu mod-proxy apache-2.2

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

如何配置 mod_proxy 而不是专门不缓存 503 错误?

这是我的 mod_proxy 配置:

<IfModule mod_proxy.c>
<Proxy *>
Order deny,allow
Allow from all
</Proxy>

ProxyPass /manage/ http://localhost:9000/manage/
ProxyPassReverse /manage/ http://localhost:9000/manage/
</IfModule>
Run Code Online (Sandbox Code Playgroud)

我发现每当我在端口 9000 上的其他网站没有正确响应时,我都会收到持续的 503 错误 - 即使在网站修复后仍然存在。换句话说,503 响应似乎被缓存了。

我怎样才能禁用它?我认为我自己没有启用缓存,也许这是默认设置。

mod-proxy apache-2.2

11
推荐指数
1
解决办法
7365
查看次数

Apache Httpd 自定义 ErrorDocument 404 当 ProxyPass 返回 404 时

我在另一个应用程序服务器前面有一个 Apache Web 服务器,使用 Proxy Pass。当对应用程序的请求返回错误 404 时,我想显示来自 Web 服务器的自定义错误页面,而不是来自应用程序服务器的页面。我试图在虚拟主机上设置 ErrorDocument 404,但它不起作用。我该怎么做?或者这是不可能的?

<VirtualHost *:80>
  ServerName servername
  DocumentRoot /somepath/
  ProxyPass / http://localhost:8080/someapp/
  ProxyPassReverse / http://localhost:8080/someapp/

  ErrorDocument 404 /error.html
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

mod-proxy errordocument apache-2.2

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

理解 apache 2.4 mod_proxy_fcgi 和 htaccess 中的 RewriteRules

我们最近将我们的一台 Web 服务器切换到 apache 2.4 并通过 php-fpm 和 mod_proxy_fcgi 运行 PHP。大多数一切都运行良好,但有一个我还不明白的问题。我们的一个网站正在运行 WordPress,它在其 .htaccess 文件中提供了一个很好的重写规则列表。并且似乎这些与 vhost 设置中的 ProxyPass 指令不能很好地配合使用。

我们的 vhost 包含以下配置:

ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.2:9126/<path>/$1
Run Code Online (Sandbox Code Playgroud)

这在大多数情况下都有效。

现在,htaccess 文件执行以下操作:

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule  ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule  ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]
Run Code Online (Sandbox Code Playgroud)

由于该站点是子目录中的多博客,我读到 URL /blogname/wp-admin/load-styles.php?xxxx 应该重写为 wp-admin/load-styles.php?xxx (第二个重写规则)。但是查看mod_proxy的日志,其实传递的请求是/blogname/wp-admin/load-styles.php。

我读到这里是因为存在一个优先级问题——ProxyPass 规则在所有 RewriteRules 都被解决之前触发。

我受阻 - 可能是什么原因?

mod-rewrite mod-proxy apache-2.4

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

使用 apache 作为 HTTPS 到 HTTP 代理

我正在尝试在 Centos 6 上配置 Apache,以将流量代理和反向代理到第三方提供商的 http 服务器。

设置应该这样工作: https://mydomain.com/proxy/ 代理所有流量透明地到 http://thirdparty.com/app/

我遇到的问题是任何要求https://mydomain.com/proxy/获得 301 重定向响应的请求。

这些是我的所有代理相关选项 VirtualHost

SetOutputFilter proxy-html
ProxyHTMLExtended On
ProxyRequests Off
SSLProxyEngine On

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


ProxyPass /proxy/ http://thirdparty.com/app/
<Location /proxy/>
        ProxyPassReverse /
        ProxyHTMLEnable On
        ProxyHTMLURLMap http://thirdparty.com/app/ /proxy/
        ProxyHTMLURLMap / /proxy/
</Location>
Run Code Online (Sandbox Code Playgroud)

mod-proxy centos6 apache-2.2

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

Apache ProxyPass 或 ProxyPassMatch 从代理中排除文件

我有一个 VirtualHost 设置为将所有请求代理到在端口 9000 上运行的另一台服务器。

我拥有的 :

ProxyPass / http://localhost:9000/
ProxyPassReverse / http://localhost:9000/
Run Code Online (Sandbox Code Playgroud)

我试过的:

! ProxyPass /test.html http://localhost:9000/
ProxyPass /test.html ! http://localhost:9000/
ProxyPassMatch !^/(.*\.html)$ http://localhost:9000/$1 
Run Code Online (Sandbox Code Playgroud)

没有一个工作...

我想从代理中排除一个文件或一组文件,文档说明了“! 指令在您不想反向代理子目录的情况下很有用。”,但没有示例对于那种情况。

mod-proxy proxypass exclude apache-2.2

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