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
    • 最新
    • 标签
主页 / user-396562

sdbbs's questions

Martin Hope
sdbbs
Asked: 2021-12-01 07:07:43 +0800 CST

在 Apache 2.4 中同一服务器的相对 URL(“子目录”)上代理“端口”应用程序?

  • 2

我已经看到如何使用反向代理正确处理相对 url - 但是我很难理解这一点(并将其应用于我的问题),希望有人能提供帮助。

假设我的服务器上有 Ubuntu 20.04 作为服务器操作系统,example.com.

然后,我在服务器上安装https://github.com/hartwork/jawanndenn并运行它——这个应用程序默认运行在 8080 端口上;我可以通过运行以下命令来确认它是否在服务器本身上运行:

wget -O- http://127.0.0.1:8080

到目前为止,一切都很好。现在,我想要的是:而不是访问https://example.com:8080来访问这个应用程序,我想访问https://example.com/jaw- 我通常称之为/jaw“子目录”,但它可能更准确地说是一个相对 URL。换句话说,如果我正确理解术语,https://example.com/jaw将反向代理到https://example.com:8080.

因此,我尝试在文件中的<VirtualHost *:443>定义中执行此.conf操作:

  <Location /jaw>
    Options -Multiviews -Indexes
    RewriteEngine On
    ProxyPass         http://127.0.0.1:8080
    ProxyPassReverse  http://127.0.0.1:8080
    SetOutputFilter proxy-html
    ProxyHTMLURLMap http://127.0.0.1:8080
  </Location>
  RewriteRule ^/jaw$ /jaw/ [R]

这有效 - 从某种意义上说,应用程序的起始页面已加载;但是无法加载大量资源(.css、.js);在浏览器中打开控制台,我可以看到一堆 404 请求:

https://example.com/static/3rdparty/jquery-3.5.1/jquery-3.5.1.min.js
https://example.com/static/3rdparty/roboto-20/css/roboto.css
...

所以,我的猜测是,有一些 .js 文件或类似文件,它们只是想加载/static/...->,如果从“端口”地址调用,它们会映射到http://127.0.0.1:8080/static/...,一切都会好起来的;但是现在,因为我们被代理了:

  • 浏览器请求https://example.com/jaw
  • Apache 得到它,将它转发到https://example.com:8080应用程序监听的地方
  • 应用程序发回具有表单链接的文件 (.js)/static/...
  • 一旦这些返回到浏览器中,它们被解释为https://example.com/static/...- 在被用作服务器的请求之前,服务器无法找到它们

我也试过去掉<Location>上面的整个片段,只在<VirtualHost *:443>节点中使用它:

  ProxyPass /jaw/ http://127.0.0.1:6789/
  ProxyPassReverse /jaw/ http://127.0.0.1:6789/

与以前完全相同 - 加载了第一页,所有其他资源显然都引用到/static/...并且它们都是 404。

最后,我也摆脱了上述陈述,并使用了这个:

  ProxyPass /jaw/  http://127.0.0.1:8080
  ProxyHTMLURLMap http://127.0.0.1:8080  /jaw
  <Location /jaw/>
    ProxyPassReverse /
    ProxyPassReverse http://127.0.0.1:8080
    ProxyHTMLEnable On
    ProxyHTMLURLMap  /  /jaw/
  </Location>

这具有完全相同的行为 - 第一页加载,资源失败 - 除了资源现在在浏览器控制台中列出为:

https://example.com/jaw/static/3rdparty/jquery-3.5.1/jquery-3.5.1.min.js
https://example.com/jaw/static/3rdparty/roboto-20/css/roboto.css
...

...并且他们因 502 代理错误而失败。所以发生了一些重写,但有些事情仍然不对劲。

所以我的问题是 - 我怎么能对 Apache 说,代理从127.0.0.1:8080 上的应用程序到显示为“子目录”(相对 URL?here /jaw)的东西?


编辑:原来,502 代理错误是由于:

AH00898: DNS lookup failure for: 127.0.0.1:6789static returned by /poll/static/js/html.js

...很明显,缺少一个斜线;所以结果是这样的:

  ProxyPass /jaw/  http://127.0.0.1:8080/
  ProxyHTMLURLMap http://127.0.0.1:8080/  /jaw/
  <Location /jaw/>
    ProxyPassReverse /
    ProxyPassReverse http://127.0.0.1:8080/
    ProxyHTMLEnable On
    ProxyHTMLURLMap  /  /jaw/
  </Location>

...实际上确实有效-大部分(/static资源);但是,有一个电话/data不能被这个处理......所以它仍然是一个悬而未决的问题(对我来说)如何代理“一切”

port reverse-proxy apache-2.4
  • 1 个回答
  • 290 Views

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