标签: mod-proxy

如何服务器静态文件 + 代理上下文

我想知道如何配置我的 httpd 服务器来提供以下页面:

当 url 为 /context/static 时,我需要提供位于我的 /var/www/static 中的静态内容,并将其余内容代理到 tomcat 服务器

按照这个顺序:

/context/static/* --> files served by httpd
/context/*        --> resources served by tomcat
Run Code Online (Sandbox Code Playgroud)

我试图将 /context/static/* 重写为指向我的 /var/www/static 的文件夹,并ProxyPath为其余部分添加了指令,但我无法让它工作。

什么是最佳实践以及如何实现?

提前致谢

apache mod-rewrite reverse-proxy mod-proxy httpd.conf

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

如何禁用 apache2 和 mod_proxy_fcgi 的缓冲?

我在 debian Jessie 上使用 mod_proxy_fcgi 和 apache 2.4,我的 C++ 应用程序使用 libfcgipp 执行 ServerSentEvents。

我的问题是,那个 apache 仍然缓冲我的响应数据。我通过使用 wireshark 确认它没有被 libfcgipp 库缓冲:通过 启动 fcgi 应用程序后spawn-fcgi,数据会尽快发送到 apache 网络服务器。但是在我的浏览器中(我用于测试,稍后会有一个 C++ 客户端)它只在我“杀死”/关闭服务器应用程序中的发送请求后才会显示。

所以我假设我需要禁用 apache 或 mod_proxy_fcgi(或两者)的缓冲。但是我找不到有关如何执行此操作的适当文档。

apache buffer fastcgi mod-proxy apache2.4

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

Apache Websocket 代理断开连接

我正在尝试通过 Apache 2.4.7(在 Ubuntu 上运行)代理 websocket。连接已正确建立,但如果浏览器或服务器在一段时间内(几分钟)没有相互发送数据,则来自服务器的新消息不会传递到浏览器。
此外,浏览器或服务器上的服务似乎也没有意识到连接在某种程度上被破坏了(它们根本不会抛出任何错误)。

如何配置服务器以避免此问题?

这是我的配置:

ProxyRequests Off
ProxyPass /somepath ws://127.0.0.1:6080/ retry=60 keepalive=On timeout=9999 ttl=9999
ProxyPassReverse /somepath ws://127.0.0.1:6080/ retry=60
Run Code Online (Sandbox Code Playgroud)

apache proxy mod-proxy proxypass websocket

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

Apache ProxyPass HTTPS 和带有 SNI 的远程服务器

我想在 Apache 中使用反向代理将 AWS APIGateway URL 放在前面。原因是由于一个过程需要静态 IP 来在严格的防火墙后面提供服务,并且当前的基础架构已经安装了 mod_proxy。我希望实现的解决方案是简单地通过 mod_proxy 路由 https->https(apiGateway)。

但是.. AWS 使用 SNI,我无法让 mod_proxy 握手。

我启用了以下设置

<IfModule mod_ssl.c>
<VirtualHost *:443>
  ProxyPreserveHost On
  SSLProxyEngine On

  ProxyPass /api/1_0/ https://xxx.execute-api.eu-west-1.amazonaws.com/1_0/
  ProxyPassReverse /api/1_0/ https://xxx.execute-api.eu-west-1.amazonaws.com/1_0/
Run Code Online (Sandbox Code Playgroud)

以下日志在调试模式下可用

proxy_util.c(2020): AH00942: HTTPS: has acquired connection for (xxx.execute-api.eu-west-1.amazonaws.com)
proxy_util.c(2610): AH00962: HTTPS: connection complete to 52.x.x.x:443 (xxx.execute-api.eu-west-1.amazonaws.com)
AH01964: Connection to child 0 established (server domain.com:443)
AH02003: SSL Proxy connect failed
SSL Library Error: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
AH01998: Connection closed to child 0 with abortive …
Run Code Online (Sandbox Code Playgroud)

apache mod-proxy mod-ssl

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

Apache 代理传递到 unix 域套接字

我需要将所有流量从指定端口转发到 Apache 中的 Unix 域套接字:

sites-enabled/000-default.conf我定义了一个VirtualHost:

<VirtualHost *:8091>
    ProxyRequests Off
    <Proxy *>
            Order deny,allow
            Allow from all
    </Proxy>
    ProxyPass / unix:/var/lib/jenkins/workspace/myproject/mysocket.sock|http://127.0.0.1/
    ProxyPassReverse / unix:/var/lib/jenkins/workspace/myproject/mysocket.sock|http://127.0.0.1/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

ports.conf我有:

Listen 80
Listen 8091
Run Code Online (Sandbox Code Playgroud)

我同时启用了proxyproxy_httpmods:

krzysiek:/etc/apache2$ a2enmod proxy
Module proxy already enabled
krzysiek:/etc/apache2$ a2enmod proxy_http
Module proxy already enabled
Run Code Online (Sandbox Code Playgroud)

我正在使用 Apache 2.4.7,官方文档指出:

在 2.4.7 及更高版本中,通过使用前缀为 unix:/path/lis.sock| 的目标,可以支持使用 Unix 域套接字。

当我重新加载 Apache 时,出现错误:

krzysiek:/etc/apache2$ sudo service apache2 restart
* Restarting web server apache2                                [fail] 
* The apache2 …
Run Code Online (Sandbox Code Playgroud)

apache mod-proxy proxypass unix-socket

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

我可以在Prefork MPM下使用Apache mod_proxy作为连接池吗?

摘要/ Quesiton:

我让Apache运行Prefork MPM,运行php.我正在尝试使用Apache mod_proxy创建一个反向代理,我可以通过它重新路由我的请求,以便我可以使用Apache来进行连接池.示例impl:

在httpd.conf中:

SSLProxyEngine On
ProxyPass /test_proxy/ https://destination.server.com/ min=1 keepalive=On ttl=120
Run Code Online (Sandbox Code Playgroud)

但是当我运行我的测试时,这是循环中的以下命令:

curl -G 'http://localhost:80/test_proxy/testpage'
Run Code Online (Sandbox Code Playgroud)

它似乎没有重新使用连接.

在进一步阅读之后,听起来我没有获得连接池功能,因为我使用的是Prefork MPM而不是Worker MPM.因此,每次我向代理发出请求时,它都会使用自己的连接池(大小为1)来旋转新进程,而不是使用维护自己的池的单个工作进程.这种解释是对的吗?


背景资料:

我通过https向我运行的网站上的每个页面发出请求的外部服务器.

谈判SSL握手变得越来越昂贵,因为我使用php而且它似乎不支持连接池 - 如果我向我的网站收到300页请求,他们必须与外部服务器进行300次SSL握手,因为连接已关闭每个脚本完成运行后.

所以我试图在Apache下使用反向代理作为连接池,在php进程之间保持连接,所以我不必经常进行SSL握手.

给我这个想法的消息来源:

apache connection-pooling reverse-proxy mod-proxy

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

从反向代理请求中保留协议和端口号

案件:

用户请求https://api.abc.com

这是在http://internal.abc.com:123上反向代理(Apache 2.2)到内部服务器服务器

根据mod_proxy重定向保留原始请求URL,添加:

ProxyPreserveHost On
Run Code Online (Sandbox Code Playgroud)

对于httpd.conf,internal.abc.com目前将原始请求URL识别为:

http://api.abc.com:123

有什么方法可以恢复https://api.abc.com的原始网址吗?也就是说,还保留原始协议(http)和端口(80,或空也很好)

apache reverse-proxy apache2 mod-proxy httpd.conf

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

Apache mod_proxy内容长度与分块编码

我已经将apache配置为代理一个(旧的,吱吱作响的,基本上是http 1.0的)Web服务器,该服务器不提供内容长度的标头,只是依靠关闭连接来标记数据结束。

在apache 2.2下,mod_proxy通过使用Transfer-Encoding:分块处理此问题,然后以与远程服务器传递数据一样快的速度传递数据。在apache 2.4下,mod_proxy通过等待来自远程服务器的整个响应来处理此问题,然后交付内容长度的页面。由于后端服务器可能需要30秒钟以上的时间才能逐渐填满一页结果,因此较旧的行为是可取的。没有明显的配置更改会导致此行为;我已经尝试了代理发送,但似乎没有帮助(如上所述,它与POST请求上传的数据有关,这不是这里的问题)。

这是可配置的,我刚刚错过了吗?

apache mod-proxy

5
推荐指数
0
解决办法
1437
查看次数

Docker容器中Apache反向代理的最小配置

我正在尝试设置一个Ubuntu Docker容器,它在端口9000上运行Node.js HTTP应用程序.为了模仿生产环境的设置,我还希望将Apache作为一个简单的反向代理服务器运行在容器中,转发给它来自端口80的应用程序(我向大坏世界揭露).

我已经能够很好地设置Node.js应用程序容器了,我可以在我的内部安装和设置Apache Dockerfile; 但我对设置反向代理完全不熟悉,所以当Apache确实启动时,它不会代理.

Dockerfile看起来像:

# DOCKER-VERSION 1.3.0
FROM    ubuntu:12.04

# Install and set up Apache as a reverse proxy
RUN     apt-get -y install apache2 libapache2-mod-proxy-html
COPY    apache2.conf /etc/apache2/app.conf
RUN     cat /etc/apache2/app.conf >> /etc/apache2/apache2.conf
RUN     service apache2 start

# Install and set up Node.js and bundle app
# ...This works...

EXPOSE  80
CMD     ["./start-app.sh"]
Run Code Online (Sandbox Code Playgroud)

...... apache2.conf我追加的/etc/apache2/apache2.conf是:

ServerName localhost

LoadModule proxy_module      /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so
LoadModule headers_module    /usr/lib/apache2/modules/mod_headers.so
LoadModule deflate_module    /usr/lib/apache2/modules/mod_deflate.so

<Proxy *> …
Run Code Online (Sandbox Code Playgroud)

apache reverse-proxy mod-proxy node.js docker

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

来自HAProxy或Apache mod_proxy的OAuth令牌验证

我在内部网络内部的HAProxy负载均衡器后面的3个节点上部署了一个微服务.使用OAuth2 APIS授权服务器保护服务.现在,我想将HAProxy移动到DMZ.我想拒绝标头中没有auth令牌的请求,并通过调用OAuth REST API验证auth令牌.

在HAProxy中,我找不到办法做到这一点.有一个option httpchk可以用于健康检查.我正在寻找可用于验证每个传入请求的类似功能.

任何人都可以帮助建议我如何使用HAProxy或Apache mod_proxy实现这一点?

oauth mod-proxy haproxy oauth-2.0

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