Apache 在端口 :80 接收请求并将它们代理到端口 :8080 的 Jetty
The proxy server received an invalid response from an upstream server
The proxy server could not handle the request GET /.
Run Code Online (Sandbox Code Playgroud)
我的困境:一切正常(快速请求,几秒或几十秒长的请求处理正常)。当请求处理需要很长时间(几分钟?)时会出现问题。
如果我直接在端口 :8080 向 Jetty发出请求,则请求处理正常。所以问题很可能出现在我使用mod_proxy 的Apache 和 Jetty 之间。如何解决这个问题?
我已经尝试了一些与 KeepAlive 设置相关的“技巧”,但没有运气。这是我目前的配置,有什么建议吗?
#keepalive Off ## I have tried this, does not help
#SetEnv force-proxy-request-1.0 1 ## I have tried this, does …Run Code Online (Sandbox Code Playgroud) 我们正在使用 Jetty 来运行 Apache Solr 索引。我们有一些查询已经超出了之前预期的最大长度,现在遇到了大多数查询不返回任何数据的问题,因为服务器没有响应(浏览器显示“连接重置”)。
这些请求不是通过浏览器发出的,而是使用 Apache_Solr_Service PHP 库以编程方式发出的。应用程序期望查询以 HTTP GET 请求的形式出现,因此简单地切换到 POST 并不能解决这个问题。
我们如何增加 Jetty 中允许的最大 HTTP GET 查询长度?
谢谢!
我们当前的堆栈是 Apache + Tomcat + MySQL,使用ProxyPassAJP 将请求从 Apache 发送到 Tomcat。我们还在相同的站点上为 Wordpress 运行 PHP,因此需要工作.htaccess文件。为了解决一个烦人的问题(请参阅此堆栈溢出页面),我们正在考虑替代堆栈。请注意,我们通常非常喜欢 apache,但这个问题是个障碍:如果我们不能修复它,我们就不能使用 Apache。
替代方案包括:
在我看来,解决方案分为两个阵营:纯 Java 阵营,如 Glassfish;或者分裂阵营,比如我们现在的Apache + Tomcat。我们喜欢纯 Java 解决方案的想法,因为更少的活动部件意味着更少的错误;但是它们中的任何一个都支持 PHP、.htaccess文件等吗?
从理论上讲,我们可以用另一种方式进行拆分——有一个简单的前端,只在需要这些功能的那些位上代理 Apache——但实际上这将是 80% 的请求。
人们建议什么选择?
我希望 Jetty 在端口 8080 上为来自任何主机的连接提供服务。我的/etc/default/jetty文件有:-
NO_START=0
JETTY_HOST=
JETTY_PORT=8080
Run Code Online (Sandbox Code Playgroud)
该服务器是一个基于 Lucid Lynx 32 位服务器 AMI 的 EC2 小型实例。APT 配置为启用了多元宇宙,并启用了规范合作伙伴存储库。Jetty 是来自合作伙伴存储库的 6.1.22。
当我使用 开始 jetty 时sudo /etc/init.d jetty start,它可以工作,并侦听来自 localhost 的连接,但不侦听其他任何连接:-
ubuntu@ip-10-224-70-51:/etc/network/if-pre-up.d$ sudo netstat -nlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
413/sshd
tcp6 0 0 127.0.0.1:8080 :::* LISTEN
5655/jsvc
tcp6 0 0 :::22 :::* LISTEN
413/sshd
udp 0 0 0.0.0.0:68 0.0.0.0:*
260/dhclient3
Active …Run Code Online (Sandbox Code Playgroud) 我想使用 Jetty (6.1.24) 将所有对 http 的请求重定向到 https。出于某种原因(我的无知)这让我望而却步。这就是我所拥有的:
<New id="redirect" class="org.mortbay.jetty.handler.rewrite.RedirectPatternRule">
<Set name="pattern">http://foobar.com/*</Set>
<Set name="location">https://foobar.com</Set>
</New>
Run Code Online (Sandbox Code Playgroud)
作为回应,我得到 200 - 好的,正文是 http 上的页面,即不会发生重定向。
我们有一个稍微复杂的 IDAM 设置:
即最终用户的机器和浏览器与父 AD 位于一个网络中,而我们基于 Jetty 的应用程序和它可以与之通信的 AD(本地 AD)位于另一个网络中。
两个 AD 之间存在双向信任。父网络中的浏览器在受信任站点中具有本地域。
Jetty 服务器的设置如下:
问题是:
然而,从父网络内的浏览器访问服务器(这是我们的用户将如何做事)不起作用!浏览器返回 401 unauth,然后提示输入凭据,输入时显示空白屏幕。然后单击地址栏并按 Enter 会执行以下两项操作之一,具体取决于凭据是用于远程 AD 还是本地 AD:
Authorization: Negotiate <60 or so random chars>)无论哪种方式,它提示的事实都是错误的!
这些症状有解释吗?我们拥有的设置可以做我们想要的吗?
就上述描述而言可能是错误的:我提到的有关 Jetty …
我有一个没有启用压缩的 Jetty 服务器(我在这里测试过)。如何启用压缩?
Apache 前端服务器连接到 Jetty 应用程序服务器时出现问题。
我认为ProxyPass !在位置块中不应该将处理传递给应用程序服务器,但由于某种原因,在我的情况下没有发生,Jetty 在缺少的静态(js、css 等)上显示 404
这是我的 Apache (v 2.4, BTW) 虚拟主机块:
DocumentRoot /path/to/foo
ServerName foo.com
ServerAdmin webmaster@foo.com
RewriteEngine On
<Directory /path/to/foo>
AllowOverride None
Require all granted
</Directory>
ProxyRequests Off
ProxyVia Off
ProxyPreserveHost On
<Proxy *>
AddDefaultCharset off
Order deny,allow
Allow from all
</Proxy>
# don't pass through requests for statics (image,js,css, etc.)
<Location /static/>
ProxyPass !
</Location>
<Location />
ProxyPass http://localhost:8081/
ProxyPassReverse http://localhost:8081/
SetEnv proxy-sendchunks 1
</Location>
Run Code Online (Sandbox Code Playgroud) 我一直在尝试将 nginx 设置为码头的代理。我有一台运行 ubuntu 服务器的笔记本电脑。现在我让码头在 localhost:8080 上工作,它在http://192.168.1.5:8080/my-webapp-0.1.0-standalone/.
我像这样配置了 nginx(我从这个页面改编了它):
server {
listen 80;
server_name nomilkfor.me;
rewrite ^(.+?)/?$ http://nomilkfor.me$1 permanent;
}
server {
listen 80;
server_name www.nomilkfor.me;
root /usr/share/nginx/html;
location / {
try_files $uri @my-webapp;
}
location @my-webapp {
proxy_pass http://localhost:8080;
}
}
Run Code Online (Sandbox Code Playgroud)
我可以从我的家庭网络连接到 nginx 并看到 nginx 欢迎屏幕。
我也试过 $ sudo netstat -tanpl|grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3264/nginx: worker
Run Code Online (Sandbox Code Playgroud)
我看到 nginx 正在侦听端口 80。
但是当我尝试加载 nomilkfor.me 时,我收到“Chrome 无法连接到 nomilkfor.me”错误。
我究竟做错了什么?
编辑
我创建了一个非常简单的配置,这个配置也通过 jetty为index.htmlin …
我想为我在单个 Jetty 实例中托管的不同域使用不同的 SSL 证书。
我不想在我的 Jetty 应用服务器前面使用 Apache。
我正在运行 Jetty 6.1.22。到目前为止,我只看到了具有单个 SSL 证书的配置,并且 SSL 的配置发生在服务器中,这让我相信 Jetty 旨在支持单个 SSL 证书。
请让我知道我是否可以使用具有 1 个以上证书的 Jetty。
我正在考虑迁移到 JBoss Application Server 6.0,因为它更接近于真正的应用服务器。这是可以在那里完成的事情吗,它是受支持的功能吗?
经过一番搜索,我发现了这个:https : //stackoverflow.com/questions/208149/configure-multiple-keystores-in-jboss-depending-on-requested-hostname
是这样吗?如果是这样,那么我怀疑 Jetty 或任何其他应用程序服务器是否会支持它。我需要有 2 个不同的连接器 - 不同的端口或 IP 地址。然后,在这种情况下,我需要使用 Apache 代理 Jetty/JBoss。
沃尔特
jetty ×10
apache-2.2 ×2
nginx ×2
apache-2.4 ×1
compression ×1
glassfish ×1
gzip ×1
java ×1
jboss ×1
kerberos ×1
proxypass ×1
solr ×1
spnego ×1
tomcat ×1
ubuntu ×1
ubuntu-10.04 ×1
virtualhost ×1