应用程序在子目录中运行,但需要 8080 端口访问,无法弄清楚反向代理

应用程序在子目录中运行,但需要 8080 端口访问,无法弄清楚反向代理

我对管理服务器还很陌生,所以请耐心等待。

我有一台来自 Microsoft Azure 的云服务器(非我选择),运行 Ubuntu 16.04 和 Apache 2.4.18。我有多个应用程序(/omeka、/wordpress 等)在 Web 子目录中运行,我可以通过任何 Web 浏览器正常访问,不需要任何特定的端口代理或转发。我正在尝试在另一个 Web 子目录(/archivesspace)中运行另一个应用程序(ArchivesSpace)。该应用程序在不同的端口有多个交互点:

localhost:8089/ – 后端
localhost:8080/ – 员工界面
localhost:8081/ – 公共界面
localhost:8090/ – Solr 管理控制台

我已经成功安装了 AS。我可以知道,因为当通过 SSH 连接到服务器时,我可以使用,$ curl localhost:8080并且输出是 AS 主页的 HTML。

我的netstat节目:

Proto  Recv-Q  Send-Q  Local Address  Foreign Address  State   PID
tcp6        0       0  :::8080        :::*             LISTEN  1985/java
tcp6        0       0  :::8081        :::*             LISTEN  1985/java
tcp6        0       0  :::8089        :::*             LISTEN  1985/java
tcp6        0       0  :::8090        :::*             LISTEN  1985/java

我无法通过浏览器访问任何端口。我总是收到错误ERR_EMPTY_RESPONSE

我曾尝试与 ArchivesSpace 的人员讨论这个问题,他们最后说的基本上是“将 Apache 设置为反向代理”。所以我尝试这样做,但毫无成效。我希望这里有人能帮忙。这是我目前在 000-default.conf 文件中为反向代理所做的工作,只是试图让其中一个端口 (8080) 正常工作。

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
</VirtualHost>

Listen 8080

<VirtualHost *:8080>
    ProxyHTMLStripComments on
    ProxyRequests off
    SetOutputFilter proxy-html
    ProxyHTMLDoctype XHTML
    ProxyPreserveHost On

    ServerName http://server.net/archivesspace

<Location />
    ProxyPass http://server.net:8080
    ProxyPassReverse http://server.net:8080
    Order allow,deny
    Allow from all
</Location>
</VirtualHost>

我已启用以下所有 Apache 模块:proxy, proxy_ajp, proxy_http, rewrite, deflate, headers, proxy_balancer, proxy_connect, proxy_html

我显然做错了什么,只是不知道是什么。我甚至不完全确定我需要的适当 URL 是什么。我假设 server.net:8081(或者可能是 server.net:8081/archivesspace?)应该会带您到 AS 公共接口。理想情况下应该是 server.net/archivesspace。反向代理是否是解决此问题的正确方法?

标签的说明apache-2.4说要发布 的输出apache2ctl -S,因此就是这样。

[Wed Feb 15 16:34:59.401845 2017] [proxy_html:notice] [pid 3722] AH01425: I18n support in mod_proxy_html requires mod_xml2enc. Without it, non-ASCII characters in proxied pages are likely to display incorrectly.
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 10.2.0.4. Set the 'ServerName' directive globally to suppress this message
VirtualHost configuration:
*:80                   10.2.0.4 (/etc/apache2/sites-enabled/000-default.conf:1)
*:8080                 server.net/archivesspace (/etc/apache2/sites-enabled/000-default.conf:34)
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex watchdog-callback: using_defaults
Mutex proxy-balancer-shm: using_defaults
Mutex rewrite-map: using_defaults
Mutex proxy: using_defaults
Mutex default: dir="/var/lock/apache2" mechanism=fcntl 
Mutex mpm-accept: using_defaults
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33 not_used
Group: name="www-data" id=33 not_used

如果我能提供任何其他信息来帮助我识别问题,请告诉我。提前感谢您提供的任何指导。

答案1

非常感谢,Patrick!这个办法奏效了。我删除了块外的所有内容VirtualHost *:80,并在其中添加了以下内容:

<Location /archivesspace>
    ProxyPass http://localhost:8081
    ProxyPassReverse http://localhost:8081
    Order allow,deny
    Allow from all
</Location>

<Location /archivesspace/admin>
    ProxyPass http://localhost:8080
    ProxyPassReverse http://localhost:8080
    Order allow,deny
    Allow from all
</Location>

还要注意的是,这两个块的顺序Location很重要。如果 8080/admin 列在第一位,则 8081 端口需要在 /archivesspace 下有一个子目录(即 /archivesspace/home),这并不理想。将 8081 放在第一位只允许访问 /archivesspace。

但是,现在我可以通过浏览器访问这些页面,但看起来所有的 CSS 和图像等都缺失了。但这完全是另一个问题,如果我无法弄清楚,我可能需要为此开一个新帖子。

更新:搞清楚了 CSS 的内容。在 config/config.rb 文件中,需要更改以下内容:

AppConfig[:frontend_proxy_url] = "http://server.net/archivesspace/admin"
AppConfig[:public_proxy_url] = "http://server.net/archivesspace"

答案2

通过说VirtualHost *:8080你告诉 Apache 监听这个端口,这是不可能的,因为你的 Java 应用程序已经监听了它。相反,你需要在你的VirtualHost *:80代码块中添加诸如<Location /ArchivesSpaces/staff>ProxyPass/ProxyPassReverse 之类的行,将其添加到你的服务器(或本地主机):8080 的 Location 代码块中,并以同样的方式添加其他 3 个端口。你可以自由选择 Location 路径中的任何内容。

相关内容