我有两个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 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 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) 在我的家庭网络上,我有一个Web服务器和一个DNS服务器.我有各种其他应用程序服务器,我已添加重定向,所以我可以简单地访问网站喜欢myapplication.domain.com或www.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,我正在尝试使用ProxyPass并ProxyPassReverse以我想要的方式重定向流量.这是我的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) 我在 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) 我的所有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在服务器上设置它可能是原因.我不知道如何深究这一点.
我们有一个奇怪的,间歇性的错误,发生在mod_proxy_ajp,即使用apache作为tomcat服务器的前端.
错误
此错误间歇性地发生,但遗憾的是很少在我们的测试服务器上并且经常在生产中.
在firefox的LiveHttpHeaders中,我在上面的用例中看到以下内容:
我认为问题可能源于ProxyPassReverse(即混淆了是否使用http或ajp),但所有这些proxypassreverse设置都导致了同样的错误:
另外,我检查了apache错误日志(设置为debug),看不到警告或错误......
**但它适用于mod_proxy_http ??**
似乎切换到mod_proxy_http'解决了这个问题.有限的测试,我无法在测试环境中重现问题.
因为这个问题是间歇性的,所以我不能100%确定mod_proxy_http"解决"了这个问题
环境
另一个数据点
无论好坏,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) 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请求可能来自哪个.
我有一个简单的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工作正常,我看到列出的文件夹内容.有任何想法吗?
我试图配置Apache以不同方式对待应用程序的某些端点。
我需要/ api,/ appname和/ admin转发到同一主机上的单独Tomcat实例,显然是在不同的端口上运行。
Apache正在监听443(SSL)。
查看Apache的文档,我看到一些示例,其中mod_rewrite用于类似的任务,而不是实际的用例。
只有端口80和443(80重定向到443)向外部开放,因此其他端口仅是内部端口……我们将其称为2001、3001和4001。
编辑:附录:我正在使用apache 2.2,目前没有计划更新到2.4.x。