标签: mod-proxy

如何配置 mod_proxy_balancer 在高负载下优雅地失败

我们有一个系统,它在多个 tomcat 前面有一个 Apache 实例。这些 tomcat 然后连接到各种数据库。我们使用 mod_proxy_balancer 平衡 tomcat 的负载。

目前我们每秒接收 100 个请求,Apache 服务器上的负载相当低,但由于 tomcats 上的数据库操作繁重,负载大约为 25%(我估计它们可以处理)。

几周后会发生一个事件,我们估计我们的请求会大幅增加,可能会增加 10 倍。

我正在尽我所能减少我们的 tomcat 的负载,但我知道我们将耗尽容量,所以我想优雅地失败。我的意思是,我希望 Apache 以某种方式监视平均响应时间,而不是尝试处理太多所有超时的连接,并且一旦对 Tomcat 的响应时间超过某个阈值,我想要一个错误页面显示。

这意味着幸运的用户仍然可以快速呈现页面,而不幸的用户则快速获得错误页面。而不是每个人都为他们的页面等待太久,最终每个人都超时,并且数据库被从未使用过的查询淹没。

希望这是有道理的,所以我一直在寻找有关如何实现这一目标的建议。

谢谢

linux mod-proxy apache-2.2

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

Apache httpd 工作者重试

我有一个运行 mod_proxy 和 mod_proxy_balancer 的 Apache httpd Web 服务器。整个 /somedir 被发送到 2 台工作机器,这些机器使用循环调度程序为请求提供服务。每台工作机器都在运行 IIS,但我认为这并不重要。

我可以通过重复请求包含机器 IP 地址的单个页面来演示负载平衡器的工作,并且可以看到它以可预测的循环方式从一个页面切换到另一个页面。

如果我关闭其中一台 IIS 服务器并开始请求相同的页面,则每个页面仅包含已启动机器的 IP 地址。但是,如果我启动 IIS 并且不运行我的 IIS 应用程序,那么 /somedir 将返回 500(应该如此)。

我已将 500 添加到故障状态(Apache 2.4)中,因此当它遇到错误时,Apache 会将工作机器置于错误状态。尽管如此,Apache 仍然将代理错误返回给客户端。如何让 Apache 捕获代理故障并以与连接故障相同的方式使用不同的工作器重试。

更新

在 StackOverflow 中提出了几乎相同的问题,因此将它们结合在一起。

/sf/ask/775859521/

mod-proxy 500-error apache-2.2 apache-2.4

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

如何将请求从一个 apache 服务器传递到另一个

我有两个启用了 mod_proxy 的 Apache 服务器。我想知道如何使用相同的端口 (80) 从“Apache Server A”“传递请求”到“Apache Server B”。

在内部 ip 为 192.168.0.5 的“服务器 A”中,我配置了 DNS,并将其用作我的邮件服务器。

在内部 IP 为 192.168.0.10 的“服务器 B”中,我有自己的云服务器。

今天,当我访问 wwww.mydomain.com 或 www.mydomain.com/webmail 时一切正常,因为内容都在“服务器 A”中,我需要的是当有人尝试访问 owncloud.mydomain.com 时,他们可以访问我的服务器 B没有将它们重定向到另一个端口,如 owncloud.mydomain.com:81,我只想使用端口 80。

实际上我得到了一个重定向循环,因为当我尝试重定向时,我猜“服务器 A”自己得到了相同的请求。我已将我的虚拟主机设置为在同一个“服务器 A”中工作,我想要的是使用相同的端口和 URL(owncloud.mydomain.com)“重定向”到另一台服务器。

我不想使用另一个端口重定向。

mod-rewrite reverse-proxy mod-proxy apache-2.2

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

Gunicorn 背后的 apache 链接到本地​​主机

我有一个使用 mod_proxy 在 Apache 后面提供烧瓶应用程序的 gunicorn。

Gunicorn 上http://localhost:8080/。假设我的服务器已开启http://example.com/

有时,当我向我的服务器发布无效链接时(例如忘记尾随),假设http://example.com/with-no-trailing-slash用户被重定向到无效链接,http://localhost:8080/with-no-trailing-slash因为客户端计算机上没有服务器。

你知道它为什么会这样吗?以及如何解决这种行为?

要启动 gunicorn 我这样做: sudo gunicorn -b localhost:8080 app:app

<VirtualHost *:80>
ServerName example.com
ServerAlias example.com

DocumentRoot /opt/example

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

# Let apache serve static files
ProxyPass /robots.txt !
ProxyPass /favicon.ico !
ProxyPass /static/ !
Alias /static/ /opt/example/app/static/

# Gunicorn handle the others
ProxyPass / http://localhost:8080/


# robots.txt et favicon.ico sont dans …
Run Code Online (Sandbox Code Playgroud)

mod-proxy gunicorn apache-2.4

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

ws 协议和 apache mod_proxy_wstunnel 配置:错误 500

尝试通过我的 Apache2 服务器访问 ws://localhost:8080/ 时出现错误 500。该服务器运行 OpenSuse Leap 42.1 和 Apache 2.4.16。

这些 Apache2 模块已启用:mod_proxy、mod_proxy_http、mod_proxy_wstunnel。

当从本地网络调用请求时,一切正常。网址示例:http://<myhost-ip-address>/api/ws/<some-url>. 它返回状态 101 和响应:Upgrade: websocket。没关系。

来自外网的同类请求失败。网址示例:ws://www.mysite.com/api/ws/<some-url>. 它返回错误 500。

Apache 访问日志包含: GET /api/ws/<some-url> HTTP/1.1" 500 ...

Apache 错误日志包含: [proxy:warn] AH01144: No protocol handler was valid for the URL /api/ws/<some-url>. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.

我的 httpd.conf:

<VirtualHost *:80>
ServerName mysite.com
ServerAlias mysite.com
# Redirection …
Run Code Online (Sandbox Code Playgroud)

mod-proxy apache-2.4 websocket

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

Apache mod_proxy:将安全 websocket 转发到非安全

我依赖的 websocket 库 ( PHP-Websockets ) 尚不支持安全套接字 ( wss)。不过我的网站已经结束https,所以我不能使用不安全的ws连接。

我正在尝试使用Apachemod_proxy将来自浏览器的安全请求转发到客户端。

Javascript

var ws = new Websocket('wss://example.com/_ws_/');
Run Code Online (Sandbox Code Playgroud)

Apache 虚拟主机

ProxyPass        "/_ws_/" "ws://127.0.0.1:8080/"
ProxyPassReverse "/_ws_/" "ws://127.0.0.1:8080/"
# I've also tried "/_ws_/" "ws://example.com:8080/"  Same error below
Run Code Online (Sandbox Code Playgroud)

尝试连接时,浏览器会收到一个500 Server Error. 日志显示:

没有协议处理程序对 URL /_ws_/ 有效。如果您使用的是 mod_proxy 的 DSO 版本,请确保使用 LoadModule 将代理子模块包含在配置中。

我已经确认,如果我删除代理规则,停止将用户重定向到https并尝试从浏览器连接到不安全的套接字:new Websocket('ws://example.com/'),一切正常。

我加载的 Apache 模块包括mod_ssl.c,mod_proxy.cmod_proxy_http.c

Apache 2.4

ssl mod-proxy apache-2.4 websocket

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

mod_jk 或 mod_proxy

我尝试使用谷歌搜索,我发现比较这两者的唯一文章是从 2005 年到 2002 年。我刚刚设置了我的第一个 Tomcat 实例来为我正在做的项目运行 Jira。我想通过端口 80 和 apache 代理它。据我所知,我可以使用 mod_proxy 轻松转发流量。使用 mod_jk 有什么区别?这两个模组之间是否有任何性能/安全差异?任何人都有通过 apache 设置转发的任何提示/经验?我正在运行 debian Lenny。

debian tomcat mod-proxy mod-jk apache-2.2

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

REMOTE_USER 通过 Apache 反向代理

我有一个启用了 mod_proxy 的 Apache 网络服务器和一个 Virtualhost,proxy.domain.com。此代理配置为提示用户提供 AuthType Basic 凭据。然后,通过带有 ProxyPass 和 ProxyReverse 的代理可以访问 web.domain.com 的内容。但是,REMOTE_USER 变量为空。我阅读了不同的东西来使用 mod_rewrite 和 mod_headers 来实现这一点,但我所有的尝试都失败了。有人比我幸运吗?

谢谢。

mod-proxy proxypass apache-2.2

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

使用 apache 根据代理响应代码添加标头

我使用带有mod_proxy 的Apache 2.2到某些 3rd 方 HTTP 服务器。

由于它不发送任何Cache-Control标头,我想为响应代码 200 添加 1 天,为 404 添加 5 分钟,为任何其他响应代码添加 0。

所以我想:

SetEnvIf HttpResponseCode "200" rc_200
SetEnvIf HttpResponseCode "404" rc_404

Header set "Cache-Control" "private, max-age=0"
Header set "Cache-Control" "public, max-age=86400" env=rc_404
Header set "Cache-Control" "public, max-age=86400" env=rc_200
Run Code Online (Sandbox Code Playgroud)

mod-proxy apache-2.2

6
推荐指数
1
解决办法
1918
查看次数

mod代理在apache上不起作用

我正在尝试在 WHM/CPanel CeEntOS Linux 服务器上安装 Mod_Proxy Apache 模块。这是系统信息:

CentOS release 5.6 (Final)
Server version: Apache/2.2.21 (Unix)
Cpanel::Easy::Apache v3.7.2 rev9999
Run Code Online (Sandbox Code Playgroud)

我安装的目的是,当我在 abc.com 站点上单击一个指向 auto.efg.com 站点的链接(假设它的 IP 地址是 192.168.0.101)时,浏览器将在 auto.efg 上加载应用程序。 com 同时在浏览器的地址栏上维护 abc.com。

所以我跟着这个教程:

http://www.hackersgarage.com/install-mod_proxy-apache-module-on-whmcpanel-ceentos-linux-server.html

所以当我完成它时,我能够做到这一点:

root@ip-xxx-xxx-xxx [/tmp/httpd-2.2.21/modules/proxy]# ls -l           
/usr/local/apache/modules/mod_proxy*

-rwxr-xr-x 1 root root 88708 Jan  5 08:22 /usr/local/apache/modules/mod_proxy.so*
-rwxr-xr-x 1 root root 49654 Jan  5 08:23 /usr/local/apache/modules/mod_proxy_connect.so*
-rwxr-xr-x 1 root root 73196 Jan  5 08:23 /usr/local/apache/modules/mod_proxy_http.so*
Run Code Online (Sandbox Code Playgroud)

现在,按照这些说明操作并尝试重新启动服务器后,出现以下错误:

/etc/init.d/httpd restart
httpd: Syntax error on line 35 of /usr/local/apache/conf/httpd.conf: module proxy_module …
Run Code Online (Sandbox Code Playgroud)

mod-proxy centos5 apache-2.2

6
推荐指数
1
解决办法
1745
查看次数