AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 607532
Accepted
SpliFF
SpliFF
Asked: 2014-06-25 05:17:07 +0800 CST2014-06-25 05:17:07 +0800 CST 2014-06-25 05:17:07 +0800 CST

隧道时 Apache / Tomcat AJP DNS 失败

  • 772

我有一种情况,我可以直接从主机或本地网络访问私有 NAT-ed apache2.4 / tomcat7.0 railo4.2 服务器,但是当通过 SSH 远程端口转发隧道时,应用程序会因错误而中断:

The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request GET /.

Reason: DNS lookup failure for: server-dev:5555

显而易见的答案是 server-dev 是一个不可解析的主机名,但这里不应该是这种情况,因为lynx server-dev:80在服务器本地或子网上的 LAN 机器上工作(名称通过客户端和服务器上的 /etc/hosts 解析)。apache 提供的静态页面也可以工作,错误似乎出现在 Tomcat 端或 AJP 连接器中。我自己从 2.4.9 源代码和 1.5.1 年编译了 apache。唯一似乎在端口转发时出现。

Apache 错误日志显示:

[Tue Jun 24 22:37:06.911541 2014] [proxy:error] [pid 16858] [client 10.10.10.15:63398] AH00898: DNS lookup failure for: server-dev:5555 returned by /

没有什么值得注意的catalina.out或我能看到的任何其他日志。

相关的apache配置是:

<VirtualHost *:80>
    ServerName server-dev
    UseCanonicalName On

    RewriteCond %{REQUEST_FILENAME} /[^/:]+\.cfml*($|/)
    RewriteRule (.*) ajp://%{HTTP_HOST}:8009$1 [P,L]
</VirtualHost>

SSH 隧道是从第三个“中间人”系统 (10.10.10.15) 使用 PuTTY 创建的,设置如下:

Remote: 5555
Local: 10.10.10.101:80

服务器上的相关 /etc/hosts 条目(它没有绑定/dnsmasq):

10.10.10.101  server-dev  # servers private ip

似乎是主机文件被忽略并且正在尝试 DNS 解析,或者 5555 端口号以某种方式混淆了它(就像它认为它是主机名的一部分),尽管我想不出任何一个好的理由即将发生。

domain-name-system
  • 1 1 个回答
  • 1983 Views

1 个回答

  • Voted
  1. Best Answer
    SpliFF
    2014-06-25T05:50:59+08:002014-06-25T05:50:59+08:00

    我发现了问题。%{HTTP_HOST}在端口不是 80 的情况下,它看起来也包含端口号,因此规则被评估为RewriteRule (.*) ajp://server-dev:5555:8009$1 [P,L].

    简单的解决方案:看起来%{SERVER_NAME}变量不包含端口。

    所以有效的规则是

    RewriteRule (.*) ajp://%{SERVER_NAME}:8009$1 [P,L]
    

    警告:我忘记了 HTTP_HOST 和 SERVER_NAME 根据客户端浏览器发送的域而有所不同。我实际上需要 HTTP_HOST 但不是端口,所以实际的解决方案是https://stackoverflow.com/questions/11553939/rewriterule-using-http-host-and-a-different-port

    RewriteCond %{HTTP_HOST} ^([^:]+)(:[0-9]+)?$
    RewriteRule ^ http://%1:12345/ [R,L]
    
    • 0

相关问题

  • Solaris DNS

  • resolv.conf 在经过一段时间后被更改

  • 为什么有些网站的网址中没有“www”就无法显示?[关闭]

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve