Articles of mod proxy

在Apache中添加mod_proxy的主机

我有一个与Mod_Proxy的Apache2到达后端(IIS与一些网站,所有configuration与一个IP上的主机名)。 我想添加主机头到达使用代理的IP(而不是主机名)的域。 <VirtualHost MYPROXYIP> ProxyPreserveHost On ProxyRequests Off ProxyVia On ProxyTimeout 300 <Proxy *> Allow from all </Proxy> ServerName www.mywebsite.com ProxyPassReverse / http://MYBACKENDIP/ ProxyPass / http://MYBACKENDIP/ </VirtualHost> 现在,MYBACKENDIP需要一个主机名。 我怎么能通过它?

mod_proxy和尾部斜杠?

我们使用httpd和mod_proxy作为我们不同Web服务器前面的反向代理。 我们有我们的www子域指向反向代理,并mod_proxy指示从那里的请求。 我一直没有想出一个简洁的方式来说这个,所以我只会显示: 如果我们有一个网站http://blah.example.com/my-web-app ,我们通常会在反向代理中添加这样一行: ProxyPass /my-web-app http://blah.example.com/my-web-app 以便用户可以访问http://www.example.com/my-web-app 。 当反向代理和Web服务器上的请求path组件( /my-web-app )相同时,会自动添加尾部的斜杠,就像有人直接访问http://blah.example.com/my-web-app 。 但是,如果path组件不同,例如: ProxyPass /my-web-app http://blah.example.com/some-other-path 那么尾部的斜线不会被添加。 这种行为是否正常? 有一些configuration可以照顾这个吗?

有没有任何理由使用Apache作为我的用户和Glassfish之间的代理?

我已经看到很多讨论关于使用Apache作为代理(mod_proxy或mod_jk)和Glassfish(以及其他Java应用服务器)的最佳方式的讨论,但是我还没有看到有人真正解释过为什么。 我现在的安装是一个运行Ubuntu Server的VPS,Glassfish在端口8080上接受HTTP请求(iptables将端口80请求转发到端口8080,因此我不必以root身份运行Glassfish)。 我运行了几个小网站。 我的网站分为两个主要部分:静态和dynamic。 他们每个都在一个单独的子域。 使用Apache(或其他Web服务器)处理静态内容会很容易,然后使用Apache作为dynamic内容的代理,但有没有这样做的理由? 如果我使用Apache,理想的情况是运行内存less于100MB,以节省其他运行的空间。 使用最新的应用程序服务器(Glassfish 3),通过使用Apache作为代理,我可以获得任何性能优势吗?

代理模式下的Apache mod_rewrite,.htaccess和ProxyPassReverse

在.htaccess文件中,我有这样的代理到Tomcat的Apache: RewriteRule (.*) http://localhost:8080/tomcat-app/$1 [P] 所有redirect以及HTML文件中的内部链接直接转到Tomcat应用程序,而不是Apache。 所以我会使用ProxyPassReverse等来正确翻译,但显然我不允许在.htaccess文件中使用该指令。 我真的不想把它们放到主Apacheconfiguration中,因为这意味着每当有变化时都要重新启动Apache。 这就是为什么我喜欢RewriteRole [P]:与ProxyPass不同,它可以放入.htaccess。 我能做什么来模拟.htaccess文件中的ProxyPassReverse? 或者更具体地说,不需要重新启动任何改变?

mod_rewrite + proxyclosures后端连接(keepalive)

我们有一个相当典型的设置:client < – > apache2(2.2.22)< – >后端(*)。 最初我们用最简单的forms使用mod_rewrite和[P]标志: <VirtualHost *:80> RewriteEngine On ProxyPreserveHost On RewriteRule ^(.*)$ http://localhost:8081$1 [P,L] </VirtualHost> 然而,使用这种设置,即使客户端使用保持连接并使用一个tcp连接发送多个http请求到apache,apache创build一个到后端的新的tcp连接来达到请求。 我决定直接尝试使用mod_proxy: ProxyPreserveHost On ProxyPass / http://localhost:8081/ 而令我惊讶的是,Apache和后端之间的tcp连接被重新使用(这是我最初的目标)。 这是为什么? 有没有在mod_rewriteconfiguration启用Keepalive后端连接? (*)后端实际上是haproxy < – >多个应用程序服务器,但我认为这不重要。

没有redirect的Apache转发(应用程序不会遵循redirect)

最近我们不得不将/任务移动到/ public / task,我想configurationApache来redirect。 但是,使用mod_rewrite,尽pipe它在浏览器中工作,似乎打破了应用程序的API调用上述位置。 会发生什么情况是应用程序返回一个页面,并显示该页面已移动,但该应用程序不遵循redirect。 那么,有没有办法简单地转发任何stream量/任务到/公共/任务没有“redirect”,即返回一个redirect状态代码? 编辑:这里有一点信息。 我发现一个简单的testing来澄清我正在尝试修复。 这是需要转发的URLpath: https://mydomain.com/task 需要去: https://mydomain.com/public/task 如果我对原始域使用curl,它只是返回一个redirect页面通知。 如果我添加-L标志,它告诉curl跟随redirect,然后成功地跟随redirect。 我假设在应用程序中(我没有访问权限)发生了非常类似的事情,它调用了/任务​​URLpath。 由于我不能修改应用程序,使其遵循redirect,我正在寻找一个解决scheme,我可以在Apache中实现。 编辑2:谢谢大家为你input。 ryanmbuild议在重写中使用[P]标志。 以下是我所做的一切: Apache显然有三种方式将访问者转发或redirect到一个URL:别名,代理和重写。 别名似乎是最明显的解决scheme,因为它默默地将访客转移到新的指定位置。 不幸的是,这并不适用于我,因为别名需要指定实际文件系统上的新位置,并与Jboss,该位置在每次重新部署/重新启动时更改。 使用ProxyPass似乎也能工作,而且有可能,但是我configuration它的每一个方法,curl都会返回一个空的结果,而且看起来没有任何事情发生。 这是我用过的代理命令无济于事: ProxyPass /task http://localhost:8080/public/task 最后,redirect(用[P]标志)解决了这个问题。 我最初的redirect看起来像这样: RewriteRule ^/task/(.*)$ public/task/$1 [R,L] 使用[R],Apache将redirect头返回给客户端,在任何浏览器中都能正常工作,但却导致像curl这样的应用程序停止了一个告诉他们redirect的页面。 curl需要-L标志,然后按照redirect。 最后,使用ProxyPass和Rewrite的组合,我能够使其工作。 我在ryanm的build议中使用了这个[P]标志,curl现在会在redirect之后,而不必使用-L标志。 我最后的指示是这样的: RewriteRule ^/task/(.*)$ http://localhost:8080/public/task/$1 [P] 再次感谢大家的帮助!

启用Apache Proxy HTTP CONNECT方法

我使用Apache作为几个不同项目的反向代理。 PCI-DSS合规性扫描显示我的Apache正在启用HTTP CONNECT方法。 正如Acunetix的网站所述 – http://www.acunetix.com/vulnerabilities/apache-proxy-http-connect-metho/ 据我所知,Web服务器使用CONNECT将SSL隧道传输到应用程序服务器。 任何build议我应该如何解决这个问题? 否则,任何人都知道如果我的Apache的HTTP CONNECT方法启用/禁用,我应该如何执行testing? 我没有太多的networking经验,也没有configurationApache。 纠正我,如果我写了一些愚蠢的东西。

Apache:使用正则expression式来代理内部URL

我有几个servlet监听内部端口,这些内部端口不能从外部访问。 我使用Apache的ProxyPass和ProxyPassReverse指令从端口443安全地提供服务: ProxyPass /media http://localhost:9002/ ProxyPassReverse /media http://localhost:9002/ 这工作正常 – https://example.com/media从http://localhost:9002/ 。 当URL有不同的部分时,问题就会发生。 例如: https://example.com/image/IMAGE_NAME_1应该从http://localhost:9002/image/IMAGE_NAME_1 。 https://example.com/image/IMAGE_NAME_2应该从http://localhost:9002/image/IMAGE_NAME_1 。 我试过一些变化,包括: RewriteEngine on RewriteRule ^/image/(.*)$ http://localhost:9002/image/$1 [L,PT] ProxyPass /image/ http://localhost:9002/image ProxyPassReverse /image/ http://localhost:9002/image 但是这种configuration导致浏览器中的Bad Request和 Invalid URI in request GET /image/1 HTTP/1.1 在日志中。 如何在代理URL内容各不相同的内部servlet?

保护使用mod_proxy处理的stream量

我有一台运行Apache和Node.js服务器的机器。 stream量通过Apache使用mod_proxy被路由如下: <VirtualHost *:443> ServerName example.com ProxyPass / http://localhost:3000 #Node.js application … (cert info) … </VirtualHost> Node.js服务器启动时: http.createServer(app).listen(process.env.PORT || 3000) // As opposed to https.createServer… 由于最初的请求是通过HTTPS完成的,即使将stream量传递给可能不安全的应用程序,stream量是否仍然安全? 我无法想象Apache和Node之间的请求会被暴露出来吗? 我最好的猜测是,如果所有请求(甚至从节点到它本身)都是通过https://example.com它们将是安全的。

看不见的Apacheredirect

我想subdomain.mydomain.com无形中redirect到https:// [myServerIP]:2083 。 (这里有一个SSL问题)。 到目前为止,我设法做到了,但redirect是可见的,我不想要它: RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} ^subdomain.\.mydomain\.com$ RewriteRule ^ https://[myServerIP]:2083/ 这将是一种方式来实现相同的redirect,同时永久保持我的美丽的“subdomain.mydomain.com”在地址栏? 编辑与ProxyPass指令: 我使用ProxyPass尝试了一些变体,但它仍然会更改地址栏中的url: ServerName subdomain.mydomain.com <Location /> ProxyPass https://[myServerIP]:2083/ ProxyPassReverse https://[myServerIP]:2083/ </Location> RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} ^subdomain\.mydomain\.com$ RewriteRule ^ https://[myServerIP]:2083/ EDIT2: 它仍然不起作用: #non SSL ServerName subdomain.mydomain.com #SSL! <Location /> ProxyPass https://[myServerIP]:2083/ ProxyPassReverse https://[myServerIP]:2083/ </Location> EDIT3: 现在它使用SSLProxyEngine指令工作: SSLProxyEngine on ServerName subdomain.mydomain.com […]