Articles of mod proxy

Apache,Tomcat:如何在单个服务器上使用多个SSL证书

我正在使用我们的Debian X64服务器,它是5个域名的端点。 其中一个域名被Apache Web服务器上运行的web项目所利用。 剩下的4个域在单独的Apache Tomcat实例上运行单独的webapps。 目前我正在使用mod_proxy将请求redirect到适当的webapps。 不幸的是,一旦HTTPS问世,这个设置就变得毫无用处。 我无法安装包含所有域的单个https证书。 这样的证书由LetsEncrypt提供。 安装证书后,任何请求将被redirect到一个单一的Tomcat域。 起初我无法理解这种行为,但在检查证书后,我发现它redirect到的域是证书中多个域中的第一个域。 我不知道为什么url没有处理,但这是目前的行为。 我正在考虑使用mod_jk而不是mod_proxy来完成这个任务,但不知道这是否正是我所需要的。 我想知道如何创build一个安装程序,我可以为每个域安装单独的SSL证书。 以下是目前设置的基本概述: Apache2 workers.properties: worker.list = worker_app1 worker.worker_app1.type = lb worker.worker_app1.balance_workers = app1_instance1 worker.worker_app1.sticky_session = true worker.worker_app1.sticky_session_force = false worker.worker_app1.method = busyness worker.app1_instance1.type = ajp13 worker.app1_instance1.host = 127.0.0.1 worker.app1_instance1.port = 8010 worker.app1_instance1.host = localhost worker.app1_instance1.lbfactor = 1 worker.app1_instance1.socket_timeout = 40 worker.app1_instance1.socket_keepalive […]

Apache2:如何使用ProxyPass限制对特定IP的访问?

我的外围networking上configuration了一个Apache2服务器作为反向代理服务器。 有很多使用ProxyPas指令configuration的VirtualHost。 对于特定的一个,我想限制访问特定的IP地址。 这是一个例子: <VirtualHost 192.168.0.1:80> ServerAdmin [email protected] ServerName sub.domain.com ServerAlias sub.domain.com ProxyPass / http://internal.domain.com:80/ ProxyPassReverse / http://internal.domain.com:80/ CustomLog /var/log/apache2/my_log combined HostnameLookups Off ProxyPreserveHost On UseCanonicalName Off ServerSignature On ProxyRequests Off </VirtualHost> 我试图添加这个: <Proxy *> Order deny,allow Deny from all Allow from 192.168.0.100 </Proxy> 但不起作用,因为反向代理不保留远程IP地址。 有一种方法可以使用configuration为反向代理的Apache的IP ACL? 谢谢

Apache ProxyPass:将请求的URL作为GETparameter passing给目标URL

嗨我想设置ProxyPass传递请求的URL作为GET参数到目标URL,但我不知道如何写在configuration文件中。 我尝试了这样的事情: ProxyPass ^(.*)$ http://example.com/?url=$1 ProxyPassReverse ^(.*)$ http://example.com/?url=$1 但它不起作用。 你能帮我吗? 谢谢!

如何在Apache 2.4中使用mod_cache和mod_proxy

问题是代理内容被Apache 2.4caching。 这个问题已经解决了Apache 2.2 (即使用mod_mem_cache)。 但是在Apache 2.4中, mod_mem_cache被删除了 。 我的上游内容来源是http://10.1.1.123:8081/data/ ,它在Apache中是这样configuration的: Alias /data /var/www/html/index.php 数据index.php的工作原理是这样的: root@orac:/var/www/html# cat index.php <?php $expires = time() + 5; $expires = gmdate( 'D, d MYH:i:s', $expires ) . ' GMT'; header( 'Content-Type: text/html; charset=utf-8' ); header( "Expires: {$expires}" ); echo $expires; 即自请求后的五秒钟后到期内容。 如果我直接(从我的Web浏览器)访问/数据的五个caching工作。 在Apache中,我的代理configuration如下所示: ProxyPass /cache/ http://10.1.1.123:8081/data/ ProxyPassReverse /cache/ http://10.1.1.123:8081/data/ […]

使用Mod Rewrite / Regex解码URL查询string

我有以下编码的url https://example.com/external-image?url=http%3A%2F%2Fwww.thirdpartydomain.com%2FTWM%2FImages%2F1264%2F143242%2FFull%2F2201625016119496.jpg 我使用国防部重写parsing查询string,然后代理的url。 我这样做的原因是从其他第三方网站使用我自己的SSL安全的共享图像。 下面的代码包含非编码的查询参数,这些参数可以很好地工作。 示例url https://example.com/external-image?url=http://www.thirdpartydomain.com/TWM/Images/1264/143242/Full/2201625016119496.jpg 示例代码 RewriteCond %{QUERY_STRING} url=((?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:\/\n]+).*) [NC] RewriteRule ^.*/external-image$ %1 [P,NC,L,E=new_host:%2] <If "-T reqenv('new_host')"> RequestHeader set Host %{new_host}e </If> 我的目标是编码我的查询参数在浏览器中形成一个有效的url,然后解码查询参数之前,我代理的url。 任何人有任何想法来处理这个最好的方法?

Apache代理 – 分离SSL_CLIENT_S_DN_CN值并设置标题

我已经在Apache代理相互SSL上configuration了 SSLVerifyClient require SSLVerifyDepth 3 configuration和通信正如预期的那样工作。 现在我想从客户端证书中的Apache代理发送到主题DN中的通用名称字段的后端信息。 CN字段具有CN=[HexString1]-[HexString2] fromat。 我想要做的是: RequestHeader set HexString1 %{SSL_CLIENT_S_DN_CN_HexString1} RequestHeader set HexString2 %{SSL_CLIENT_S_DN_CN_HexString2} 我正在研究mod_rewrite,但它似乎并没有帮助我分裂CN来实现我的目标。 有没有办法如何在Apache代理中configuration它?

Apache:在代理传递中遵守DNS ttl

我们试图设置一堆Apaches 2.4.18来代理将收到的请求传递给合作伙伴的上游服务器。 我们的合作伙伴使用亚马逊的Elastic Load Balancing,因此我们唯一知道的服务器就是它的DNS名称。 DNSlogging的TTL是60秒,我想知道Apache是​​否可以遵守这个ttl,只要DNSlogging有效,然后在TTL过期时请求翻译就保持连接正常。 使用mod_proxy DisableReuse = on强制在每次上游需要资源时打开一个新的连接。 只要下面的操作系统进行DNS TTLcaching,就可以实现这个function。 如果没有,每次需要一个新的资源时,Apache将强制一个新的DNS请求,增加响应时间。 我想过玩mod_proxy ttl和超时参数,但我认为我没有正确解决这个问题。 根据文档,mod_proxy的超时参数控制一个套接字等待来自上游的数据的时间,但我不确定Apache实例是否会closures连接并打开一个新的连接。 此外,玩超时是容易出错的,因为较低的值可能会向客户端发送错误的答案。 我花了一些时间试图解决这个设置没有喜悦。 有没有特别的设置来覆盖这种情况? 或者我也跳过了一些东西? 任何帮助,将不胜感激。 最好, Gustau

从代理响应中取消设置标题

我有一个Apache 2.2下的代理configuration,它将/blog所有请求传递给我无法控制的主机。 我想从代理响应中取消设置特定的HTTP头( X-Powered-By: PHP ),这样浏览器就不可见了。 我试过这个: ProxyPass /blog http://blog.example.com ProxyPassReverse /blog http://blog.example.com Header Always Unset X-Powered-By 还有这个变化: <Location /blog> ProxyPass http://blog.example.com ProxyPassReverse http://blog.example.com Header Always Unset X-Powered-By </Location> 在这两种情况下,头都通过代理发送。 我也试过Header Always Edit ,也没有效果。 有趣的是,如果我使用Header Always Set X-Powered-By Test ,则得到的响应包含X-Powered-By: Test, PHP – 即我的值被添加在来自代理的值之前 。 我怀疑mod_proxy运行“太迟” mod_headers操纵响应。 是否有办法让Header在“稍后”运行,或者其他一些指令可以在代理返回后处理响应。

mod_proxy_http不能启用

我有当前代理模块启用,并正常工作: $ apache2ctl -M | grep proxy proxy_module (shared) proxy_fcgi_module (shared) 当我启用mod_proxy_http与a2enmod proxy_http和service apache2 restart ,Apache返回错误,如果mod_proxy未启用: oct 16 10:55:45 apachectl [15243]:apache2:/etc/apache2/apache2.conf中第140行的语法错误:/etc/apache2/mods-enabled/proxy_http.load第2行的语法错误:无法加载/usr/lib/apache2/modules/mod_proxy_http.so放入服务器:/usr/lib/apache2/modules/mod_proxy_http.so:undefined symbol:ap_proxy_check_connection ap_proxy_check_connection是一个mod_proxy.h方法https://ci.apache.org/projects/httpd/trunk/doxygen/group__MOD__PROXY.html#ga618c0e1bede21bdd3af5d6a802671cae 也许模块顺序加载的一些问题? 谢谢。 更新:在IncludeOptional指令之前添加LoadModule mod_proxy后,问题是相同的。 $ vi /etc/apache2/apache2.conf Include /etc/apache2/mods-available/proxy.load Include /etc/apache2/mods-available/proxy.conf # Include module configuration: IncludeOptional mods-enabled/*.load IncludeOptional mods-enabled/*.conf $ apache2ctl -M | grep proxy [Mon Oct 16 11:14:00.205439 2017] [so:warn] [pid […]

使用Apache和mod_proxy发布多部分表单数据到mongrel实例的问题

我试图在我的本地机器上尽可能地模拟我的网站的生产环境。 这是一个使用Apache w / mod_proxy将请求转发给杂种群集的rails站点。 在我的Mac OSX Leopard机器上,我有默认安装的apache运行,并configuration了一个虚拟主机,使用mod_proxy将请求转发到端口3000上的本地运行的mongrel实例。 <Proxy balancer://mongrel_cluster-development> BalancerMember http://127.0.0.1:3000 </Proxy> 大多数情况下,这工作正常。 我可以使用我configuration的虚拟主机的ServerName来浏览我的开发站点,并且可以确认请求正在正确地转发到该mongrel实例。 但是,网站上有一个页面,它具有用于将图像上载到服务器的多部分表单。 当我张贴这个表格时,大约有5分钟的延迟,浏览器最终返回一个 Bad Request Your browser sent a request that this server could not understand. 在我的虚拟主机的错误日志中: [Tue Sep 22 09:47:57 2009] [error] (70007)The timeout specified has expired: proxy: prefetch request body failed to 127.0.0.1:3000 (127.0.0.1) from ::1 () 如果我直接浏览到杂种实例( http://127.0.0.1:3000 […]