我对管理服务器还很陌生,所以请耐心等待。
我有一台来自 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 路径中的任何内容。