标签: mod-proxy

如何基于http vs https将mod_proxy配置为ProxyPass?

我在启用 SSL 的情况下运行 Apache Tomcat。我有 Apache HTTP Server 作为反向代理,所以如果用户点击http://myserver/tomcat/他们将被传递到http://myserver:8080

ProxyPass /tomcat/ http://myserver:8080/
ProxyPassReverse /tomcat/ http://myserver:8080/
Run Code Online (Sandbox Code Playgroud)

我也为 SSL 配置了 Apache HTTP 服务器,所以当用户点击https://myserver/tomcat/ 时,他们应该被传递到https://myserver:8443/

使用当前的 ProxyPass 和 ProxyPassReverse 配置,它们将被重定向到非 ssl URL。如何设置代理传递,以便它根据传入请求重定向到不同的协议和端口?

也就是说,如果有人通过 HTTPS 进入,我如何将他们重定向到我的 tomcat @ https://myserver:8443


更新:

@mike-insch

我试过:

NameVirtualHost *:443

<VirtualHost *:80>
    ProxyPass /tomcat/ http://myserver:8080/
    ProxyPassReverse /tomcat/ http://myserver:8080/
</VirtualHost>

<VirtualHost *:443>
    ProxyPass /tomcat/ https://myserver:8443/
    ProxyPassReverse /tomcat/ https://myserver:8443/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

现在,当我访问:https://myserver/tomcat/我得到“找不到页面”。在错误日志中,我看到“文件不存在:/var/apache2/htdocs/tomcat”

这是正确的,但我希望请求被路由到在https://myserver:8443/ 上运行的 tomcat 。

猜猜我需要更多地查看虚拟主机,除非某些东西看起来明显错误。

mod-proxy apache-2.2

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

ProxyPreserveHost 在单独的 proxypass 规则上

我的 Web 主机上有两个 proxypass 规则,一个指向用于缓存目的的本地 varnish 实例,我希望为其启用 ProxyPreserveHost,另一个指向第三方托管站点,我希望为其禁用 ProxyPreserveHost。无论如何,我可以在每个规则/通行证的基础上做到这一点吗?

proxy mod-proxy apache-2.2

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

Apache 反向代理 Java 应用程序服务器 CLOSE_WAIT 连接

我已经将 Apache 设置为 Java 应用程序服务器 (GlassFish) 的反向代理,我注意到即使在空闲的开发系统上也有大约 100 个连接处于 CLOSE_WAIT 状态:

sudo netstat -n -e -p -a -t | grep httpd | grep CLOSE_WAIT | wc -l
Run Code Online (Sandbox Code Playgroud)

我正在使用以下 HTTP 代理设置:

ProxyPass /myapp http://localhost:8080/myapp ttl=20 max=1 smax=0
ProxyPassReverse /myapp http://localhost:8080/myapp
Run Code Online (Sandbox Code Playgroud)

为什么所有这些联系都存在?我已经设置了“ttl=20 max=1 smax=0”,所以我认为所有连接都会在空闲系统上被清理。应用程序服务器是否没有尽其所能清理连接?

glassfish mod-proxy apache-2.2

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

如何将 Web 服务器的 DNS 从一个 IP 地址顺利迁移到另一个 IP 地址?

我目前为 Linux/Apache 服务器注册了一个域名,我将用新 IP 地址上的另一个域名替换该域名。

迁移数据的速度相对较快,在此过程中出现 5 分钟的中断是可以接受的。

DNS 记录的 TTL 显然为 6-12 小时,我无法加快速度。

这种变化可能产生的后果是什么?想必还在查看旧地址的用户会继续访问旧服务器,而 dns 缓存已过期或为空的用户将看到新域。

是否可以从旧服务器(使用 Apache 或 iptables)重定向到新 IP?只要需要,旧服务器可以继续运行。

domain-name-system reverse-proxy mod-proxy proxypass apache-2.2

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

使用中间的 Apache 代理重写 302 应用服务器重定向 URL

我有一个奇怪的设置。它看起来像这样:

Browser ----------> HTTPs Proxy ------> Apache HTTP -----> Tomcat AJP
           HTTPS                 HTTP                AJP
Run Code Online (Sandbox Code Playgroud)

在 HTTPS 代理(一个非常愚蠢的代理)上,一个 URL 看起来像 https://proxy.domain.com/app。然后它使用 HTTP 隧道传输到 Apache,就像 http://apache.domain.com/app(传入主机 proxy.domain.com)。Apache 然后使用 AJP 协议在本地将请求通过隧道传输到 ajp://localhost:8009/app/。

有时应用服务器想要重定向请求的路径。例如,将 /app/ 重定向到 /app/webapp。因此,它将 302 发送回重定向路径的 apache - 可能类似于 ajp: //localhost:8009/app/webapp。Apache 然后将重定向 URL 重写为 http://proxy.domain.com/app/webapp。HTTPS 代理很笨,所以它不会分析重定向并将 http 更改为 https。

所以,我想弄清楚我是否可以配置 Apache 来重写 302 重定向 URL 以将用户发送到 https。

这是我目前在 Apache 的 https.conf 中的配置:

ProxyPreserveHost       on
RewriteEngine           on
RewriteRule ^/app$ /app/ [PT]
ProxyPass /app ajp://localhost:8009/app
Run Code Online (Sandbox Code Playgroud)

我尝试使用ProxyPassReverse,但无法弄清楚如何强制它使用 https 而不是 http 重写 302 …

ssl mod-proxy redirect apache-2.2

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

mod_deflate - 大多数浏览器的最佳配置

我想知道这里是否有人可以帮助我确定在 Apache 中使用 mod deflate 的最佳标准配置。基本上,mod_deflate 建议使用以下配置立即开始:

仅压缩几种类型

AddOutputFilterByType DEFLATE text/html text/plain text/xml http://httpd.apache.org/docs/2.0/mod/mod_deflate.html

但是,仅通过阅读文档,您就可以为所有浏览器自定义它。此外,您可以为所有不同类型的 mime 类型自定义 mod_deflate。我想知道是否有人尝试过这些设置并找到了对所有浏览器都最佳的设置。

Apache 提供的另一个示例,但如果您不了解所有配置选项,请不要使用:

<Location />
# Insert filter
SetOutputFilter DEFLATE

# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4 gzip-only-text/html

# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip

# MSIE masquerades as Netscape, but it is fine
# BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

# NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48
# the above regex won't work. You can …
Run Code Online (Sandbox Code Playgroud)

proxy mod-proxy virtualhost mod-deflate apache-2.2

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

带有 httpd mod_proxy_balancer 的“没有对 URL 有效的协议处理程序”

我正在尝试为具有 localhost 静态资源副本的反向代理服务器设置故障转移,这些资源通常由内容管理系统提供服务。我曾经wget为了故障转移的目的抓取动态站点的静态副本。

我尝试使用类似于Apache 的 ProxyPass 指令的回退位置的配置让事情开始,这是一个相当简单的,但我在标题中遇到错误。

这是我的(经过消毒的)代理配置:

DocumentRoot /var/www/www.example.com/htdocs

ProxyRequests Off
ProxyPreserveHost On

ProxyPass "/site/" "balancer://cms"
ProxyPassReverse "/site/" "balancer://cms"
ProxyPassReverse "/site/" "http://ip-10-1-1-229.ec2.internal/site/"

<Proxy "balancer://cms">
    #BalancerMember "http://ip-10-1-1-229.ec2.internal/site/" loadfactor=1
    # For localhost services, a backup of the CMS's site
    BalancerMember "http://127.0.0.1/site-backup/www.example.com/site/" loadfactor=10 status=+H
</Proxy>

<Directory "/var/www/www.example.com/htdocs/site-backup">
  Order allow,deny
  Allow from all

  Options Indexes FollowSymlinks
  DirectoryIndex index.html
</Directory>
Run Code Online (Sandbox Code Playgroud)

(在这里,我已经注释掉了进入真正 CMS 系统的平衡器成员——那部分工作得很好——这样我就可以测试本地的静态副本。)

有一个index.html文件,/var/www/www.example.com/site-backup/www.example.com/当我尝试点击时它确实被加载了http://www.example.com/site/,但是页面的其他资源(CSS、图像等)都没有被加载。他们在页面中有 URL,例如:

我有一个文件,foo.png在这个位置:

/var/www/www.example.com/htdocs/site-backup/www.example.com/site/sites/default/files/foo.png
Run Code Online (Sandbox Code Playgroud)

但是当浏览器加载该图像时,我会收到500 Internal …

reverse-proxy mod-proxy apache-2.4

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

如何配置 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中如何定义多个ProxyPass到具有相同上下文根的不同服务器?

** 更新了此答案底部的解决方法 **

我需要让我的 webapp 代理到 2 个外部报告服务器。所以我将为每个外部报告服务器提供一个菜单项。

但是浏览器 URL 看起来也像是我的服务器,所以我不能只是重定向。这些服务器都具有相同的上下文根 /ibm

对于这两个服务器,浏览器 URL 应该类似于http://example.com/ibm .. 而 apache 代理到正确的。

应该如何进行这样的设置?Apache 如何知道它必须代理哪一个?

如果我必须做一些更改,我不会我的,所以 URL 会变成这样:

http://example.com/rep1/ibm and http://example.com/rep2/ibm
Run Code Online (Sandbox Code Playgroud)

我设法使用我的 weblogic-proxy servlet 和操作 URL 等获得了预期的效果,但如果这可以以某种方式完成,Apache 将是一个更有效的解决方案。

我感谢任何输入。

此外,对外部报告服务器的初始请求是从我的 web 应用程序启动的,而不是从浏览器启动。

** 更新 **

我们现在必须代理到大约 10 个其他网络服务器,其中一些有这个问题。但是每当目标网络服务器部署在根目录中时,我们还必须重写主体等。对于这些代理集成中的一些来说,这需要大量的反复试验。

解决方法:我们已经为这些代理的网络服务器切换到子域,实际上子域 URL 仍然指向我们自己的 apache,但是使用这些子域名称我们可以更轻松地在我们的 Apache 配置中设置虚拟主机和代理,并且我们不必重写任何响应主体等。

web-applications mod-proxy proxypass apache-2.4

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

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万
查看次数