Articles of mod proxy

Apache反向代理Unescapes URL

我在我的DMZ中运行Apache 2.2.15作为反向代理。 我在互联网上提供了一个内部networking上的应用程序供员工通过反向代理使用。 作为这个应用程序的一部分,员工可以看到带有PDF附件的消息。 内部员工(不必通过反向代理)可以下载这些PDF文件。 外部人员不能。 这就是我在应用程序服务器上的Apache日志中看到的内容。 172.20.0.9 – – [04/Dec/2014:08:48:21 +1300] "GET /application/home/getAttachment/MTE7Y3lzdGljIGZpYnJvc2lzLnBkZg%3D%3D HTTP/1.1" 200 88090 10.0.0.2 – – [04/Dec/2014:08:48:27 +1300] "GET /application/home/getAttachment/MTE7Y3lzdGljIGZpYnJvc2lzLnBkZg== HTTP/1.0" 400 – 第一个请求来自成功下载PDF文件的内部用户。 第二个来自DMZ中的反向代理。 请注意,它是如何将URL末尾的“%3D%3D”转义为“==”的。 我正在做的反向代理中有几件事情。 首先如果有人试图去根目录,一个重写规则将它们发送到应用程序目录。 <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^/$ /application/ [NE,R] </IfModule> configuration的其他相关部分是反向代理部分。 <IfModule mod_proxy.c> RequestHeader set Front-End-Https "On" SSLProxyEngine on SetEnv force-proxy-request-1.0 1 SetEnv proxy-nokeepalive […]

Apache – 我应该使用“ProxyPass …”还是“RewriteRule … ”来代理请求?

Apache的文档说,你可以使用mod_rewrite做类似的事情mod_proxy,通过使用[P]选项。 我应该用哪个? 还是没有区别? 现在我使用的是从mod_proxy中的ProxyPass ,因为我也想包含ProxyPassReverse ,而且文档暗示你应该有这个,并且从mod_rewrite文档中不清楚ProxyPassReverse (或者等价的function)是否包含在RewriteRule .. [P] 你用哪个?

根据代理的响应代码,使用apache添加一个头文件

我使用Apache 2.2与mod_proxy到一些第三方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

通过代理*服务所有请求,除了*特定的一个

我有我的httpd.conf中的以下内容 <VirtualHost *:80> ServerName foo.org ServerAlias www.foo.org <Proxy *> Options FollowSymLinks MultiViews Order allow,deny Allow from all AllowOverride All </Proxy> ProxyPass / http://127.0.0.1:5012/ ProxyPassReverse / http://127.0.0.1:5012/ </VirtualHost> 这可以很好地工作,因为http://foo.org的所有请求都使用不同的Web服务器从端口5012提供。 不过,我想通过Apache从端口80只服务于http://foo.org/lib 。我该怎么做? 将下面的行添加到conf中并没有帮助 Alias /lib /path/to/lib <Directory "/path/to/lib"> AllowOverride None Options None Order allow,deny Allow from all </Directory>

代理:没有HTTP 0.9请求(没有主机线)

我在我的error.log中遇到了一堆这些错误: [客户端1.2.3.4]代理服务器:没有HTTP 0.9请求(没有主机线)在传入请求和保护软pipe集强制主机名为www.mydomain.com为uri / 我的configuration基本上是: ProxyRequests Off <VirtualHost 1.2.3.4:80> ServerName www.mydomain.com DocumentRoot "c:/apache/htdocs" ProxyPreserveHost On ProxyPass / http://172.1.1.1/ </VirtualHost> <VirtualHost 1.2.3.4:443> ServerName www.mydomain.com DocumentRoot "c:/apache/htdocs" # SSL Stuff ProxyPreserveHost On ProxyPass / http://172.1.1.1/ </VirtualHost> 任何人都有一个想法如何消除这些警告?

YouTrack在Tomcat 7上使用SSL

我有一个使用Tomcat 7部署的正在运行的YouTrack实例,它在http://example.com:8080/youtrack上正常工作 Apache已经被configuration为支持主域的SSL(我有.pem文件)。 https://example.com和http://example.com都可以正常访问。 端口8443已被其他服务使用( https://example.com:8443显示我Pleskpipe理面板)。 现在我想设置YouTrack使用https://youtrack.example.com 我怎样才能做到这一点? 我是否需要configurationTomcat以支持SSL(生成单独的密钥等),或者只是将来自Apache的请求代理到Tomcat? 我想第一步是将YouTrackconfiguration为https://example.com:8444/youtrack ,然后使用Apache的mod_proxy代理请求。 我怎样才能做到这一点? 我的/var/lib/tomcat7/conf/server.conf是默认的,没有任何改变: http : //pastie.org/9385045 我的/usr/share/tomcat7/bin/setenv.sh包含更改YouTrack默认URL的条目: -Djetbrains.youtrack.baseUrl=http://youtrack.example.com 虚拟主机configuration: $ cat /etc/apache2/sites-enabled/default <VirtualHost *:80> ServerName example.com ServerAlias www.example.com DocumentRoot /var/www/default <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www/default> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory […]

在Apache中如何使用相同的上下文根来定义多个ProxyPass到不同的服务器?

**更新与解决方法在这个答案的底部** 我有一个要求我的web应用程序代理到2个外部报告服务器。 所以我将为每个外部报告服务器提供一个菜单项。 但是,浏览器的URL也看起来像我的服务器,所以我不能只是redirect。 这些服务器都具有相同的上下文根/ ibm 对于这两个服务器,浏览器URL应该看起来像http://example.com/ibm ,而apache代理正确的。 应该如何做这样的设置? Apache如何知道它必须代理哪个? 如果我不得不做一些改变,那么URL将会变成: http://example.com/rep1/ibm and http://example.com/rep2/ibm 我设法使用我的weblogic-proxy servlet和操作URL等来达到预期的效果,但是如果可以以某种方式完成,Apache将是一个更高效的解决scheme。 我很欣赏任何input。 此外,对外部报告服务器的初始请求是从我的web应用程序启动,而不是从浏览器启动。 **更新** 我们现在必须代理约10个其他的networking服务器,其中一些有这个问题。 但是每当目标web服务器被部署在根目录中时,我们也必须重写主体等等。对于这些代理集成中的一些来说,这是一个试验和错误。 解决方法:我们已经切换到这些代理服务器的子域,实际上子域URL仍然指向我们自己的Apache,但是使用这些子域名,我们可以更容易地在我们的Apacheconfiguration中设置一个虚拟主机和代理服务器,我们不必重写任何响应机构等。

在apache后面的gunicorn链接到本地​​主机

我有一个使用mod_proxy在Apache后面的gunicorn服务器。 Gunicorn在http://localhost:8080/ 。 假设我的服务器位于http://example.com/ 有时,当我发布一个无效的链接到我的服务器(如忘记尾随),让我们说http://example.com/with-no-trailing-slash ,用户被redirect到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/ […]

Apache的mod_proxy与mod_rewrite

使用mod_proxy和mod_rewrite有什么区别? 我有一个需要发送特定的URL模式通过tomcat,它运行在同一主机上,但端口8080.我知道这是mod_proxy,但我想知道为什么我不能只使用mod_rewrite,或有什么区别是什么? 可能必须做w /反向代理,并且还在stream水线中处理? 谢谢。

ProxyPass只有在文件不存在的情况下

我见过这个例子: RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f RewriteRule ^/(.*)$ balancer://app_cluster%{REQUEST_URI} [P,QSA,L] 我需要一个类似的东西,当一个静态文件不存在时,将委托给mod_proxy(即做一个ProxyPass)。 它可行吗?