标签: mod-proxy

mod_proxy:粘性会话不起作用

我有两个JBoss AS 7服务器,我正在使用负载平衡mod_proxy.除粘性会话外几乎所有东西都能正常工作 我在cookie中的会话ID不在URL中JSESSIONID.

这是我的apache配置:

NameVirtualHost *:80
<VirtualHost *:80>

   ProxyPass / balancer://mycluster/ stickysession=JSESSIONID|jsessionid nofailover=Off
   ProxyPassReverse / balancer://tutcluster/
   ProxyPassReverse / http://server1:8080/
   ProxyPassReverse / http://server2:8080/
   ProxyPreserveHost On
   ProxyRequests Off

   <Location / >
      Order deny,allow
      Allow from All
   </Location>

   <Proxy balancer://mycluster/>
      BalancerMember http://server1:8080 route=jbossWeb1 retry=60
      BalancerMember http://server2:8080 route=jbossWeb2 retry=60
   </Proxy>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

apache session load-balancing mod-proxy jboss7.x

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

Apache子域重定向到Tomcat

我很新的的Apache HTTP,和一般的系统管理员-ING,所以我有这个问题,我有一个域(www.doamin.com)与Apache监听80端口,还我有一个的Apache Tomcat在同一个域配置为端口8080.

有没有办法配置子域(即tomcat.domain.com),因此它将重定向到我的tomcat特定应用程序,因此用户可以通过app1.domain.com和app2.domain.com访问应用程序(它将被提供通过Tomcat)?

我见过很多提到的

mod_jk的

mod_proxy的

但所有的帖子都假设了Apache的先验知识.有人能跟我走吗?

非常感谢,-PK.

apache subdomain tomcat mod-proxy mod-jk

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

无法配置apache服务器以代理SSL连接

我正在使用Apache Portable Runtime运行Tomcat7上的应用程序,我购买了SSL证书并正确配置 - 当我尝试通过ip:端口组合连接时,它连接正常但警告我证书是发给域名的,不是知识产权.

我所使用的VPS没有SELinux(并且安装时出现问题),这是AFAIK要求在apache中配置SSL所需的,所以我想将请求路由到Tomcat,Tomcat就是这样做的.

我将apache配置为代理连接,首先是端口80完美运行:

NameVirtualHost www.mysite.com:80
<VirtualHost www.mysite.com:80>
ProxyPreserveHost On
ProxyRequests Off
ServerName http://www.mysite.com
ServerAlias http://www.mysite.com
ProxyPass / http://localhost:8180/MYSITE/
ProxyPassReverse / http://localhost:8180/MYSITE/
ProxyPassReverseCookiePath /MYSITE/ /
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

然后使用不想因某些原因工作的SSL端口:

NameVirtualHost www.mysite.com:443
<VirtualHost www.mysite.com:443>
        SSLProxyEngine On
        ProxyPreserveHost On
        ProxyRequests Off
        ServerName https://www.mysite.com
        ServerAlias https://www.mysite.com
        ProxyPass / https://localhost:8443/MYSITE/
        ProxyPassReverse / https://localhost:8443/MYSITE/
        ProxyPassReverseCookiePath /MYSITE/ /
        CacheDisable *
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

编辑:我添加了

RequestHeader set Front-End-Https "On"
Run Code Online (Sandbox Code Playgroud)

指向VirtualHost www.mysite.com:443的指令,见:http://www.gossamer-threads.com/lists/apache/users/396577

这是在Tomcat的server.xml中配置的Tomcat APR连接器 -

<Connector port="8443" maxHttpHeaderSize="16500"
                 maxThreads="150"
                 enableLookups="false" disableUploadTimeout="true"
                 acceptCount="100" scheme="https" secure="true"
                 SSLEnabled="true" …
Run Code Online (Sandbox Code Playgroud)

ssl apache2 virtualhost mod-proxy mod-ssl

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

ProxyPassReverse丢弃HTTPS

在我的家庭网络上,我有一个Web服务器和一个DNS服务器.我有各种其他应用程序服务器,我已添加重定向,所以我可以简单地访问网站喜欢myapplication.domain.comwww.domain.com/application获得我的各种服务.我有一台在另一台服务器上运行的Subsonic服务器,我的目标是能够https://subsonic.domain.com在我的Web服务器上访问并获取通过SSL提供的Subsonic流量.最终我希望从家庭外部访问它,这就是为什么通过HTTPS代理非安全的HTTP流量很重要,但是现在,我只是想让它在家里工作.

当我访问时https://subsonic.domain.com,我最终得到"无法连接"错误.我似乎被重定向到的地址是subsonic.domain.com/login.view.如果我将HTTPS添加到该URL的前面,我将获得我正在寻找的登录页面.然而,一旦我再次登录,URL就会改变,我被重定向,我最终再次失去了HTTPS,必须不断重新添加它.显然我做错了什么.

我已经设置了一个VirtualHost subsonic.domain.com,我正在尝试使用ProxyPassProxyPassReverse以我想要的方式重定向流量.这是我的VirtualHost这个网站:

    <VirtualHost subsonic.domain.com:443>

        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*[^/])$ /$1/ [L,R=301]

        ProxyRequests Off
        ProxyErrorOverride Off
        ProxyPreserveHost On

        ServerAdmin webmaster@localhost

        ProxyPass / http://192.168.1.5:4040/
        ProxyPassReverse / http://192.168.1.5:4040/

        SSLEngine on

        SSLCertificateFile      /etc/apache2/ssl/apache.crt
        SSLCertificateKeyFile   /etc/apache2/ssl/apache.key

    </VirtualHost>
Run Code Online (Sandbox Code Playgroud)

SSL肯定正在运行,没有任何问题.我有另一个相同的虚拟主机用于另一个工作正常(重定向https://www.domain.com/directory)的目录,所以我不确定这里的问题是什么.在ProxyPassReverse之后,URL似乎正在丢失https://部分.如果我添加它,该网站工作正常,直到我访问另一页并https://再次丢失.如果我直接访问应用程序服务器http://192.168.1.5:4040,我没有任何问题.

任何建议都是最受欢迎的.

编辑

关于我正在尝试做什么的一点澄清.我想让我的Apache服务器完成所有重定向和处理所有SSL请求.基本上,从浏览器到Apache服务器是HTTPS,ProxyPass从Apache服务器到应用服务器我们都是未加密的HTTP(很好,这是我的内部网络),ProxyPassReverse从应用服务器到Apache服务器都是纯HTTP,然后Apache服务器将流量作为HTTPS发送出去.

这是另一个VirtualHost,可以为不同的子域执行我想要的操作.这是经过测试并且100%工作.我通过HTTPS连接到我的Apache服务器,Apache服务器用普通的旧HTTP连接我自己的Cloud服务器,对我的Apache服务器的响应是普通的HTTP,然后Apache服务器用HTTPS将请求返回给浏览器:

<VirtualHost www.domain.com:443>

            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteRule ^(.*[^/])$ /$1/ …
Run Code Online (Sandbox Code Playgroud)

apache mod-proxy ubuntu-14.04

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

Webmin 登录不断循环到 session_login.cgi

我在 VPS 上有一个有效的 webmin 设置,但是在尝试强制它通过 HTTPS 连接后,我在某个地方做了一些错误,现在每当我尝试登录时,登录页面都无法正确显示(没有蓝色矩形背景)和尝试通过登录https://server1.domain.me:10000不断将我重定向到https://server1.domain.me:10000/webmin/session_login.cgi,这又是一个登录页面。

在它开始出现故障之前,我有以下文件 /etc/apache2/sites-available

<VirtualHost *:80>
        ServerAdmin webmaster@domain.me
        ServerName domain.me
        ServerAlias www.domain.me

        DocumentRoot /var/www/domain.me/
        <Directory />
                RedirectMatch temp ^/$ /public_html
                Options FollowSymLinks
                AllowOverride None
        </Directory>

        <Directory /var/www/domain.me>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        <Directory /var/www/domain.me/redmine>
                AllowOverride None
                order allow,deny
                allow from all
                RailsBaseURI /redmine
                PassengerResolveSymlinksInDocumentRoot on
        </Directory>

       ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog …
Run Code Online (Sandbox Code Playgroud)

apache mod-proxy webmin

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

什么与我的Websocket连接断开连接?(cloudflare,apache的mod_proxy)

我的所有websocket连接都通过http(s)端口到达并代理到后端WS服务器:

[client]----[cloudflare]----[Apache 2.4 mod_proxy_wstunnel]----[websocket server]
Run Code Online (Sandbox Code Playgroud)

一旦客户端连接到我的WS服务器,如果没有数据通过套接字,则连接总是在100秒后被切断.

在开发环境中,使用相同的客户端,也使用mod_proxy_wstunnel相同的WS服务器,不会发生此限制

如果WS服务器每60秒发送一次ping,则不会切断连接.

我想知道是否有人看过有关Cloudflare断开静默WS连接的文档,以及是否mod_proxy在服务器上设置它可能是原因.我不知道如何深究这一点.

apache mod-proxy websocket cloudflare

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

mod_proxy_ajp错误:将html呈现为text/plain,提示用户"另存为..."

我们有一个奇怪的,间歇性的错误,发生在mod_proxy_ajp,即使用apache作为tomcat服务器的前端.

错误

  • 用户点击链接浏览器会提示用户"另存为...."(例如在Firefox中"你选择了顶级开放的thread.jsp,这是一个应用程序/八位字节流"...... firefox应该对这个文件做什么)
  • 用户说"嗯?" 并按"取消"
  • 用户再次点击同一链接
  • 浏览器正确显示页面

此错误间歇性地发生,但遗憾的是很少在我们的测试服务器上并且经常在生产中.

在firefox的LiveHttpHeaders中,我在上面的用例中看到以下内容:

  • 首页下载(即点击链接)是"text/plain"
  • 第二次下载是"text/html"

我认为问题可能源于ProxyPassReverse(即混淆了是否使用http或ajp),但所有这些proxypassreverse设置都导致了同样的错误:

另外,我检查了apache错误日志(设置为debug),看不到警告或错误......

**但它适用于mod_proxy_http ??**

似乎切换到mod_proxy_http'解决了这个问题.有限的测试,我无法在测试环境中重现问题.

因为这个问题是间歇性的,所以我不能100%确定mod_proxy_http"解决"了这个问题

环境

  • Apache 2.2 Windows
  • Jboss 4.2.2后端(tomcat 6)

另一个数据点

无论好坏,tomcat中的servlet过滤器会在将html发送到apache之前对其进行gzip压缩.(这意味着额外的工作,因为apache必须在执行ProxyPassReverse的"查找和替换"之前解压缩).我不知道"gzip"是否会混乱.

问题

  • 有人见过这个吗?
  • 什么工具有助于分析原因?

谢谢

附录1:这是LiveHttpHeaders输出

浏览器错误地将html视为"text/plain"

http://forums.customer.com/pe/action/forums/displaythread?rootPostID=10842016&channelID=1&portalPageId=1002

GET http://forums.customer.com/pe/action/forums/displaythread?rootPostID=10842016&channelID=1&portalPageId=1002 HTTP/1.1
Host: forums.customer.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 ( .NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Proxy-Connection: keep-alive
Cookie: __utma=156962862.829309431.1260304144.1297956514.1297958674.234; __utmz=156962862.1296760237.232.50.utmcsr=forumstest.customer.com|utmccn=(referral)|utmcmd=referral|utmcct=/pe/action/forums/displaythread; s_vi=[CS]v1|258F5B88051D3FC3-40000105C056085F[CE]; inqVital=xd|0^sesMgr|{"sID":4,"lsts":1292598007}^incMgr|{"id":"755563420055418864","group":"CHAT","ltt":1292598006741,"sid":"755563549194447187","igds":"1290627502757","exempt":false}^inq|{"customerID":"755562378269271622"}^saleMgr|{"state":"UNSOLD","qDat":{},"sDat":{}}; inqState=sLnd|1^Lnd|{"c":4,"flt":1274728016,"lldt":17869990,"pgs":{"201198":{"c":1,"flt":1274728016,"lldt":0},"0":{"c":3,"flt":1274845009,"lldt":17752997}},"pq":["0","0","0","201198"],"fsld":1274728016697}; …
Run Code Online (Sandbox Code Playgroud)

apache tomcat mod-proxy ajp

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

代理背后的servlet:获取未代理的URL

Servlet规范,Tomcat或Wicket中是否有任何允许在mod_proxy后面运行的webapp来确定请求的非代理URL

我们需要发送带有链接的电子邮件.我一直在使用以下Wicket来构建应用程序中特定页面的URL:

String relURL = RequestCycle.get().getRequest().getRelativePathPrefixToWicketHandler();
RequestUtils.toAbsolutePath(relURL);
Run Code Online (Sandbox Code Playgroud)

由于电子邮件不会通过代理返回,当然URL不会被重写,最终看起来像http://localhost/....

现在,我能做的最好的事情就是将URL硬编码到我们的生产服务器上,但是这会让我们在开发/测试机器上运行时遇到一些调试问题.

使用InetAddress.getLocalHost().getHostName()并不是真正的解决方案,因为这可能会返回prod1.mydomain.com或者某些,而不是mydomain.dom请求可能来自哪个.

java wicket servlets mod-proxy

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

ProxyPassMatch和Options + Indexes(mod_autoindex)

我有一个简单的Apache2.4和PHP-FPM设置,我正在尝试启用+ Indexes选项,但我得到404"找不到文件".尝试访问没有索引文件的文件夹时,即使启用了autoindex也是如此.

这是我的vhost的一部分:

#php
ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/var/run/fpm/fatal.sock|fcgi://

#super public directory with Indexes!
<Location /pub>
    Options +Indexes
    IndexOptions +FancyIndexing
</Location>
Run Code Online (Sandbox Code Playgroud)

当我尝试访问http://domain.com/pub/时,我希望看到我放在那里的文件列表,但我收到错误404 Not Found.

我想知道它来自何处,因为ProxyPassMatch不应转发请求,因为查询中没有.php,所以接下来是目录索引,它查找不存在的index.php(404),但为什么mod_autoindex不起作用?

当我删除ProxyPassMatch行时,autoindex工作正常,我看到列出的文件夹内容.有任何想法吗?

php mod-proxy mod-autoindex apache2.4

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

使用Apache将端点转发到同一主机上的不同端口

我试图配置Apache以不同方式对待应用程序的某些端点。

我需要/ api,/ appname和/ admin转发到同一主机上的单独Tomcat实例,显然是在不同的端口上运行。

Apache正在监听443(SSL)。

查看Apache的文档,我看到一些示例,其中mod_rewrite用于类似的任务,而不是实际的用例。

只有端口80和443(80重定向到443)向外部开放,因此其他端口仅是内部端口……我们将其称为2001、3001和4001。

编辑:附录:我正在使用apache 2.2,目前没有计划更新到2.4.x。

apache mod-rewrite tomcat reverse-proxy mod-proxy

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